我并不是对所有事情都很精通launchd
,但是我编写了这个plist
文件,它会定期运行offlineimap
以从 IMAP 服务器获取新邮件:
<?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>net.dpo.offlineimap</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/offlineimap</string>
<string>-o</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ProcessType</key>
<string>Background</string>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>
该文件位于~/Library/LaunchAgents/net.dpo.offlineimap.plist
。
问题是当我将计算机从睡眠状态唤醒时,该进程似乎没有被唤醒。正在运行
$ launchctl stop net.dpo.offlineimap
$ launchctl start net.dpo.offlineimap
重新激活它,但这似乎破坏了该KeepAlive
选项。
我尝试使用
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<true/>
<key>NetworkState</key>
<true/>
</dict>
但我观察到了同样的行为。我在 OSX 10.9 上。我~/.offlineimaprc
没有使用该autorefresh
选项。
该plist
文件有什么问题吗?
提前致谢!
答案1
好吧,我可能误解了 的意思KeepAlive
。事实证明自制分发一个可以完成以下工作的plist
文件:offlineimap
<?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>KeepAlive</key>
<false/>
<key>Label</key>
<string>homebrew.mxcl.offline-imap</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/offline-imap/bin/offlineimap</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>RunAtLoad</key>
<true />
<key>StandardErrorPath</key>
<string>/dev/null</string>
<key>StandardOutPath</key>
<string>/dev/null</string>
</dict>
</plist>
守护进程现在可以睡眠了。