非常简单Launchd plist没有运行我的脚本

时间:2009-09-03 00:41:41

标签: macos launchd

我正在试图找出我的启动脚本无法正常工作的原因。它非常简单,但我是mac环境的新手,并试图习惯。这是我的plist。我知道ProgramArguments是必需的,所以我只是将脚本路径放在那里。

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
<plist version="1.0">  
<dict>  
  <key>Label</key>  
  <string>com.tomcat.plist</string>   
  <key>ProgramArguments</key>  
  <array>  
    <string>/opt/apache-tomcat-5.5.27/bin/startup.sh</string>  
  </array>  
  <key>OnDemand</key>  
  <false/>  
</dict>  
</plist>

当我尝试运行launchctl load <name>时,它似乎正确加载(因为它没有给我任何错误消息),但是即使在重新启动时脚本似乎也没有执行。

我已经使用了我在网上找到的所有示例,但我无法弄清楚为什么在启动时没有运行我的脚本。

3 个答案:

答案 0 :(得分:43)

万一其他人遇到这个问题,并且他们的plist中已经有<key>RunAtLoad</key><true/>,我想提供一些额外的解决方案。

仔细检查权限以确保您的脚本可执行(查找“x”):

ls -l /opt/apache-tomcat-5.5.27/bin/startup.sh

必要时修改权限:

chmod +x /opt/apache-tomcat-5.5.27/bin/startup.sh

首先直接运行脚本并确保它有效:

/opt/apache-tomcat-5.5.27/bin/startup.sh

如果脚本是可执行的,并且直接运行正常,请尝试将系统日志拖到调试launchd:

sudo launchctl log level debug 
tail -f /var/log/system.log

-f标志(基本上)不断显示日志的结束(最新条目)。您可以删除此标志以仅打印日志结尾的快照。如果使用此标志,则需要打开新终端以运行其他命令。按CTRL + C结束尾部会话。有关更多信息:

man tail

完成调试后:

sudo launchctl log level error

还有其他日志级别。有关更多信息:

man launchctl

如果对脚本或plist进行任何更改,请确保重新加载plist。例如:

launchctl unload ~/Library/LaunchAgents/com.tomcat.plist
launchctl load ~/Library/LaunchAgents/com.tomcat.plist

如果您只对脚本而不是plist进行了更改,则可以重新启动plist:

launchctl stop com.tomcat.plist
launchctl start com.tomcat.plist

如果您将以下键值添加到plist:

<key>KeepAlive</key>
<true/>

然后你可以运行:

launchctl stop com.tomcat.plist

它将自动重启。

如果这些都没有帮助,并且您在OS X上设置Tomcat时遇到问题,那么this tutorial可能会有所帮助。

答案 1 :(得分:13)

要在调用launchctl load时自动运行脚本,需要添加: -

<key>RunAtLoad</key>
<true/>

或者你可以使用: -

launchctl start com.tomcat.plist

答案 2 :(得分:1)

尽管我想大多数人都不会遇到这个问题,但我认为值得把它放在这里,因为我花了近两个小时的时间来弄清楚为什么launchd load尽管返回了0退出代码仍无法正常工作

问题很简单。我的plist文件扩展名错误(我的扩展名为“ plst”),而launchctl默默地拒绝加载该文件。将扩展名更改为plist解决了该问题。