我试图找出为什么我的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>
它似乎正确加载(因为它没有给我任何错误消息),但脚本似乎并没有被执行,甚至在重新启动。
我用我在网上找到了所有的例子,我想不通这是为什么没有运行启动了我的脚本。
万一别人碰到这个问题上运行,并已拥有<key>RunAtLoad</key><true/>
在他们的plist,我想提供一些额外的解决方案。
仔细检查权限,以确保您的脚本是可执行的(寻找一个“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的问题, 本教程可能有所帮助。
为了使你的脚本运行时,会自动调用launchctl负载,您需要添加: -
<key>RunAtLoad</key>
<true/>
另外,您可以使用: -
launchctl start com.tomcat.plist
虽然我想大多数人不会有这样的问题,我想,这是值得投入在这里,因为我花了近两个小时,试图找出原因launchd load
没有返回,尽管工作0
退出代码。
这个问题很简单。 我plist
文件有错误的文件扩展名(我有“ plst
”),并launchctl
悄悄拒绝加载该文件。 更改扩展plist
解决了这个问题。