如何检查launchd是否已启动脚本?

hyw*_*l51 23 launchd

我将launchd配置为每天晚上18点在我的mac pro上启动命令,但它无法正常工作.

我想检查一下launchd是否运行了该命令.我试过系统控制台,没有找到任何有价值的东西.

我的mac os版本是mac os x 10.8.3

我的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>mytask</string>
    <key>Program</key>
    <string>/opt/local/bin/node</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/xxx/My/task.js</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>18</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
    <key>StandardOutPath</key>
    <string>/Users/xxx/launchd.stdout.log</string>
    <key>StandardErrorPath</key>
    <string>/Users/xxx/launchd.stderr.log</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

LCC*_*LCC 27

您已定义StartCalendarInterval,因此作业在加载时已执行,并且每天将在18:00执行.

查询launchd(8)以查找其退出状态:

launchctl list | grep mytask
Run Code Online (Sandbox Code Playgroud)

这将返回一行:

<pid> <status> mytask
Run Code Online (Sandbox Code Playgroud)

如果pid是数字,则作业当前正在运行.否则看一下status,这是程序的退出代码,在你的情况下是节点.退出代码为0表示程序已成功完成或尚未启动.程序错误返回正数,而负数表示作业因信号而终止.

我认为这份工作失败了.您可能想要检查程序标准输出/错误.指定StandardOutPathStandardErrorPath执行此操作.这些文件的内容可能会告诉您程序失败的原因.

  • 确保在更改后重新加载作业定义(`unload`,然后`load`).只修改文件并发出启动命令将无法完成工作. (3认同)
  • 从plist中删除"<key> Program </ key>"并将<string>/opt/local/bin/node </ string>移动到<key> ProgramArguments </ key> <array>后,任务运行成功与launchd开始. (3认同)