多年来我编写了很多启动代理来自动执行一些简单的任务,比如将我的音乐和照片从我的笔记本电脑同步到我的 NAS。最近我注意到他们已经不再像以前那样每天跑步了。相反,它们仅在我登录时运行。这是一个示例启动代理:
<?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.mwheinz.backup_photos</string>
<key>Program</key>
<string>/Users/michaelheinz/bin/backup_photos</string>
<key>StartInterval</key>
<integer>86400</integer>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
当我用“调试”运行它们时,它说它们被配置为“在启动时”运行:
~ » sudo launchctl debug gui/501/com.mwheinz.backup_books
Password:
Service configured for next launch.
有什么建议吗?我注意到的一件事是,launchd 现在坚持我将我的代理称为“gui/501/
好的 - 我想通了。对我来说,问题是 plists 的语法在某些时候发生了变化。这个语法:
<key>Program</key>
<string>/Users/michaelheinz/bin/backup_books</string>
变成了这个语法:
<key>ProgramArguments</key>
<array>
<string>/Users/michaelheinz/bin/backup_books</string>
</array>
我改变了我所有的 plists,他们又开始工作了。