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

30 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>
Run Code Online (Sandbox Code Playgroud)

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

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

Aar*_*han 43

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

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

ls -l /opt/apache-tomcat-5.5.27/bin/startup.sh
Run Code Online (Sandbox Code Playgroud)

必要时修改权限:

chmod +x /opt/apache-tomcat-5.5.27/bin/startup.sh
Run Code Online (Sandbox Code Playgroud)

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

/opt/apache-tomcat-5.5.27/bin/startup.sh
Run Code Online (Sandbox Code Playgroud)

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

sudo launchctl log level debug 
tail -f /var/log/system.log
Run Code Online (Sandbox Code Playgroud)

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

man tail
Run Code Online (Sandbox Code Playgroud)

完成调试后:

sudo launchctl log level error
Run Code Online (Sandbox Code Playgroud)

还有其他日志级别.欲获得更多信息:

man launchctl
Run Code Online (Sandbox Code Playgroud)

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

launchctl unload ~/Library/LaunchAgents/com.tomcat.plist
launchctl load ~/Library/LaunchAgents/com.tomcat.plist
Run Code Online (Sandbox Code Playgroud)

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

launchctl stop com.tomcat.plist
launchctl start com.tomcat.plist
Run Code Online (Sandbox Code Playgroud)

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

<key>KeepAlive</key>
<true/>
Run Code Online (Sandbox Code Playgroud)

然后你可以运行:

launchctl stop com.tomcat.plist
Run Code Online (Sandbox Code Playgroud)

它会自动重启.

如果这些都没有帮助,并且您在OS X上设置Tomcat时遇到了问题,那么本教程可能会有所帮助.

  • 可爱."sudo launchctl log level error"不再实现. (15认同)
  • @Michael`start`和`stop`将标签作为参数而不是文件名.在上面的例子中,配置有`<string> com.tomcat.plist </ string>`但是你的可能只有`com.tomcat`所以`launchctl start com.tomcat`应该可以工作. (2认同)

Jam*_*ead 14

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

<key>RunAtLoad</key>
<true/>
Run Code Online (Sandbox Code Playgroud)

或者你可以使用: -

launchctl start com.tomcat.plist
Run Code Online (Sandbox Code Playgroud)