这是我的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小时启动一次。其实现在已经过去了四十八个多小时了,还是一次都没有启动。这里我漏掉了什么?
然后我将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更新:我认为这意味着crontab中的* 21 * * *,所以如果它是
<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>发布于 2014-07-30 23:13:56
对于计划的定时作业,应使用key StartCalendarInterval (Reference)
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>11</integer>
</dict>发布于 2014-08-07 22:03:30
在launchd开发人员文档中的某处有一条警告,即按需服务需要保留一段最短的时间。(类似于10秒IIRC。)否则,launched会认为它们无法正常启动,并会尝试重新启动它们。
尝试将sleep 30添加到您的shell脚本中,看看这是否解决了不断重启的问题。
https://stackoverflow.com/questions/25040207
复制相似问题