launchd 调度难题

launchd 调度难题

这里有一个难题:我在 /Library/LaunchDaemons 中有一个 .plist,它设置为每天凌晨 3:01 运行,但它不是运行。但是(这是令人费解的部分)当使用 launchctl 启动时,一切都正常:

sudo launchctl start com.my.daemon

此外(这更加令人费解)如果您卸载守护进程,将 StartCalendarInterval 更改为几分钟后,然后重新加载守护进程,一切也会正常工作 - 守护进程会在几分钟后指定的时间执行脚本。

所以基本上,唯一无法正常工作的情况就是我真正希望它工作的方式,即第二天凌晨 3:01 开始

作为参考,脚本如下所示。它在 Tiger 10.4.11 上运行:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>com.my.daemon</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/bin/open</string>
                <string>/Users/joe/import/do_import.fp7</string>
        </array>
        <key>StandardErrorPath</key>
        <string>/Library/Logs/my_err.log</string>
        <key>StandardOutPath</key>
        <string>/Library/Logs/my_out.log</string>
        <key>StartCalendarInterval</key>
        <dict>
                <key>Hour</key>
                <integer>3</integer>
                <key>Minute</key>
                <integer>1</integer>
        </dict>
        <key>UserName</key>
        <string>joe</string>
        <key>WorkingDirectory</key>
        <string>/Users/joe/import/</string>
</dict>
</plist>

您将想知道日志中的内容。由于我昨天对此进行了大量修改,并且在复制和粘贴过程中可能无意中加载了同名的其他守护进程,因此我不确定这是否真的是有问题的守护进程的日志。不过,这是错误日志中的内容。(但是,请记住,当通过“launchctl start”或将 StartCalendarInterval 设置为几分钟后启动守护进程时,日志是空的。)

2012-01-21 03:00:53.199 open[816] CFLog (0): CFMessagePort: bootstrap_register(): failed 1100 (0x44c), port = 0x2203, name = 'Processes-0.151912449' See /usr/include/servers/bootstrap_defs.h for the error codes.

2012-01-21 03:00:53.208 open[816] CFLog (99): CFMessagePortCreateLocal(): failed to name Mach port (Processes-0.151912449) CFMessagePortCreateLocal failed (name = Processes-0.151912449 error = 0)

2012-01-21 03:01:00.100 open[818] CFLog (0): CFMessagePort: bootstrap_register(): failed 1100 (0x44c), port = 0x2203, name = 'Processes-0.152043521' See /usr/include/servers/bootstrap_defs.h for the error codes.

2012-01-21 03:01:00.101 open[818] CFLog (99): CFMessagePortCreateLocal(): failed to name Mach port (Processes-0.152043521) CFMessagePortCreateLocal failed (name = Processes-.152043521 error = 0)

非常感谢帮助,不仅因为我需要它才能工作,还因为这个难题让我抓狂。

相关内容