【问题标题】:VERY simple Launchd plist not running my script非常简单的 Launchd plist 没有运行我的脚本
【发布时间】:2010-11-25 03:33:23
【问题描述】:

我试图弄清楚为什么我的启动脚本不起作用。这非常简单,但我是 mac 环境的新手,并试图习惯。这是我的清单。我知道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 &lt;name&gt; 时,它似乎可以正常加载(因为它没有给我任何错误消息),但脚本似乎没有执行,即使在重新启动时也是如此。

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

【问题讨论】:

    标签: macos launchd


    【解决方案1】:

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

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

    或者你可以使用:-

    launchctl start com.tomcat.plist
    

    【讨论】:

      【解决方案2】:

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

      仔细检查权限以确保您的脚本是可执行的(查找“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 可能会有所帮助。

      【讨论】:

      • 我写的测试脚本有同样的问题...launchctl 'start' 和 'stop' 命令返回错误“No such process”
      • @Michael startstop 将标签作为参数而不是文件名。在上面的示例中,配置有&lt;string&gt;com.tomcat.plist&lt;/string&gt;,但您的配置可能只有com.tomcat,所以launchctl start com.tomcat 应该可以工作。
      • 可爱。 “sudo launchctl 日志级别错误”不再实现。
      • 我仍然无法让它工作。尝试手动执行,出现以下错误。 /Users/user/Library/LaunchAgents/com.xyz.plist: Operation not permitted。我们是否也需要 plist 文件的可执行权限。 -rw-r--r-- 1 user group 997 May 7 17:28 /Users/user/Library/LaunchAgents/com.xyz.plist。我正在使用 puppet 来执行它。它还将launchctl load com.xyz.plist 打印为调试消息但更正。 Java jar 未启动。
      【解决方案3】:

      虽然我想大多数人都不会遇到这个问题,但我认为值得把它放在这里,因为我花了将近两个小时试图弄清楚为什么尽管返回了 0 退出代码,launchd load 仍然不起作用。

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

      【讨论】:

      • 谢谢!就我而言,我忘记了 plist 后缀,并且没有任何警告
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多