我正在尝试在 OS X 上使用 launchd 设置一个简单的重复任务。我的 plist 文件位于 /Users/me/Library/LaunchAgents 中,我希望它执行的操作是运行命令node --version
。我的 plist 文件如下所示:
<?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.blah.testnode</string>
<key>ProgramArguments</key>
<array>
<string>node</string>
<string>--version</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
</dict>
</plist>
当我运行时它打印出了正确的响应launchctl load com.blah.testnode.plist
,但现在看来每次后续执行都会给我以下错误:
2014 年 8 月 24 日下午 1:54:03.845 com.apple.launchd.peruser.501[251]: (com.blah.testnode[36483]) 作业执行失败 (3)。设置事件以告知我们何时重试:2:没有此文件或目录
2014 年 8 月 24 日下午 1:54:03.845 com.apple.launchd.peruser.501[251]: (info.jayharris.testnode[36483]) 作业因奇怪原因无法执行(3): 2
有人知道如何让它工作吗?谢谢。
答案1
我在从 LaunchAgent .plist 启动节点应用程序时遇到了类似的问题。 Launchctl 需要二进制文件或脚本的完整路径才能执行该文件。 因此,解决方案是确保您为节点提供准确的目录。 例如,由于我使用 homebrew 安装了节点,因此我指定了完整路径/usr/local/bin/node
。
答案2
有一个可执行文件,它基本上是一个自托管服务。当我使用代码从终端运行它时,它会毫无问题地触发
/Users/user/Public/node_modules/codem-transcode/bin/codem-transcode -c /Users/user/Public/tmp/config.json
因此,我创建了一个要在启动时运行的 plist 脚本,并将其存储在 LaunchAgent 文件夹中。运行它时,我收到“没有此文件或目录”错误。
这张图片展示了我所掌握的几乎所有信息
以下是代码中的 plist
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>Label</key>
<string>com.wolftech.transcode.job</string>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/com.wolftech.transcode.job.err</string>
<key>StandardOutPath</key>
<string>/tmp/com.wolftech.transcode.job.out</string>
<key>StartInterval</key>
<integer>60</integer>
<key>ProgramArguments</key>
<array>
<string>/Users/user/Public/node_modules/codem-transcode/bin/codem-transcode -c /Users/user/Public/tmp/config.json</string>
</array>
</dict>
</plist>