我正在试图找出我的启动脚本无法正常工作的原因。它非常简单,但我是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>
时,它似乎正确加载(因为它没有给我任何错误消息),但是即使在重新启动时脚本似乎也没有执行。
我已经使用了我在网上找到的所有示例,但我无法弄清楚为什么在启动时没有运行我的脚本。
答案 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
解决了该问题。