我有一个非常简单的 Launch Daemon,com.daily.vocab.plist,它只运行一个基本脚本。它应该在每天的某个时间运行(使用 StartCalendarInterval),但我无法做到这一点。网上很多帖子都说它会运行一两分钟,但对我来说它永远不会运行。
我在测试时将运行时间设置为未来 5 分钟,现在将其设置为在每分钟的第 0 秒运行,这样我就可以让它工作。一旦它开始工作,我会将其设置为我想要的每日运行时间。
按照本教程的建议,它保存在 /Library/LaunchDaemons 中。我手动加载它launchctl load /Library/LaunchDaemons/com.daily.vocab.plist
。事实上,我确实看到它在我运行时已加载launchctl list
。当我手动告诉它运行时launchctl start com.daily.vocab
,它会按预期立即工作。唯一的问题是 StartCalendarInterval 似乎被忽略了。我在我的 Macbook 上参加 Mavericks。
这是文件:com.daily.vocab.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.daily.vocab</string>
<key>Program</key>
<string>/Users/MGS/developer/projects/vocab-sms/scripts/DEvocab.sh</string>
<key>StartCalendarInterval</key>
<dict>
<key>Second</key>
<integer>0</integer>
</dict>
</dict>
</plist>
理想情况下,我相信我希望它每天早上 7:15 运行,从而使该StartCalendarInterval
部分改为:
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>7</integer>
<key>Minute</key>
<integer>15</integer>
</dict>
如果您甚至可以分享一个您必须使用 StartCalendarInterval 工作的 LaunchDaemon 示例以及您为使其工作而采取的每一步(例如 running launchctl load x.x.x.plist
),那将非常有帮助!
解决方案:这个本地守护进程实际上应该是一个用户代理,所以它需要保存在 ~/Library/LaunchAgents 目录中并从其加载。从那里,我还需要卸载代理并重新加载代理。
注意:在您卸载/加载之前,守护程序/代理不会在 launchd 中自动更新。您不能只保存更新的 .plist 并期望它工作!