【发布时间】:2014-07-30 15:00:06
【问题描述】:
这是我的 plist 文件
<?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.homebrew.autoupdate</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/brew_up</string>
</array>
<key>StartInterval</key>
<integer>86400</integer>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/brew.log</string>
<key>StandardOutPath</key>
<string>/usr/local/var/log/brew.log</string>
</dict>
</plist>
/usr/local/bin/brew_up 只是一个调用brew update、brew upgrade 等的脚本
#!/bin/sh
echo `date`: Start updating brew
/usr/local/bin/brew update && /usr/local/bin/brew upgrade && /usr/local/bin/brew cleanup
echo `date`: Finish updating brew
然后我通过launchctl load ~/Library/LaunchAgents/homebrew.autoupdate.plist加载了那个文件
然后我尝试了launchctl start com.homebrew.autoupdate,它也很好用。
但问题是,它不会像我预期的那样每 24 小时启动一次。实际上现在已经过去了48小时,甚至一次都没有开始。我在这里错过了什么?
然后我把StartInterval改成了StartCalendarInterval
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>21</integer>
</dict>
然后无限期启动,日志文件如下:
Thu Aug 7 21:17:20 CST 2014: Finish updating brew
Thu Aug 7 21:17:20 CST 2014: Start updating brew
Already up-to-date.
Thu Aug 7 21:18:14 CST 2014: Finish updating brew
Thu Aug 7 21:18:14 CST 2014: Start updating brew
Already up-to-date.
Thu Aug 7 21:19:39 CST 2014: Finish updating brew
Thu Aug 7 21:19:39 CST 2014: Start updating brew
Already up-to-date.
Thu Aug 7 21:22:28 CST 2014: Finish updating brew
Thu Aug 7 21:22:28 CST 2014: Start updating brew
Already up-to-date.
Thu Aug 7 21:24:46 CST 2014: Finish updating brew
更新:我认为这意味着 * 21 * * * 就像在 crontab 中一样,所以如果是的话
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>21</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
它应该可以工作。
但是,StartInterval 有什么问题?
顺便说一句,我只是尝试编写一个简单的演示来测试StartInterval,它完全有效!
<?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.test.touch</string>
<key>ProgramArguments</key>
<array>
<string>touch</string>
<string>/tmp/touched.txt</string>
</array>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>
【问题讨论】:
-
你有没有想过这个问题?和你一样,我观察到使用较小的 StartInterval 时一切正常:apple.stackexchange.com/questions/412388/…