首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OS X launchd.plist

OS X launchd.plist
EN

Stack Overflow用户
提问于 2014-07-30 23:00:06
回答 2查看 510关注 0票数 1

这是我的plist文件

代码语言:javascript
复制
<?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 updatebrew upgrade等的脚本

代码语言:javascript
复制
#!/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

代码语言:javascript
复制
  <key>StartCalendarInterval</key>
  <dict>
    <key>Hour</key>
    <integer>21</integer>
  </dict>

然后它被无限期地启动,日志文件如下:

代码语言:javascript
复制
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 * * *,所以如果它是

代码语言:javascript
复制
      <key>StartCalendarInterval</key>
      <dict>
        <key>Hour</key>
        <integer>21</integer>
        <key>Minute</key>
        <integer>0</integer>
      </dict>

应该能行得通。

但是,StartInterval到底出了什么问题?

顺便说一句,我刚刚试着写了一个简单的演示来测试StartInterval,它完全起作用了!

代码语言:javascript
复制
<?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>
EN

回答 2

Stack Overflow用户

发布于 2014-07-30 23:13:56

对于计划的定时作业,应使用key StartCalendarInterval (Reference)

代码语言:javascript
复制
<key>StartCalendarInterval</key>
<dict>
    <key>Hour</key>
    <integer>11</integer>
</dict>
票数 0
EN

Stack Overflow用户

发布于 2014-08-07 22:03:30

launchd开发人员文档中的某处有一条警告,即按需服务需要保留一段最短的时间。(类似于10秒IIRC。)否则,launched会认为它们无法正常启动,并会尝试重新启动它们。

尝试将sleep 30添加到您的shell脚本中,看看这是否解决了不断重启的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25040207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档