adi*_*dib 4 macos cocoa crontab scheduled-tasks launchd
Cocoa(和Mac OS X)中安排程序运行的最佳方法是什么:
除了调度之外,如果用户删除应用程序,也应该很容易取消调度程序并且不会导致错误.
本质上,该程序是一个卫星命令行可执行文件,放在同一个.app包中的主应用程序文件旁边.该程序的目的是在用户的主目录(内部~/Library/Application Support/MyApp)中进行一些后台数据更新.
这是crontab一个很好的候选人吗?该man页面crontab表示该功能已被吸收launchctl,但我似乎无法找到如何安排特定时间来运行该实用程序.
谢谢.
launchd是这样做的正确方法(crontab在Mac上不赞成使用launchd).您将创建一个plist文件,其中包含有关您的程序的信息(可执行文件名,参数等),其中一部分将是(警告在浏览器中输入并且未经测试):
<key>StartCalendarInterval</key>
<dictionary>
<key>Hour</key>
<integer>12</integer>
</dictionary>
<key>StartInterval</key>
<integer>7200</integer>
<key>LimitLoadToSessionType</key>
<string>Aqua</string>
<key>RunAtLoad</key>
<true/>
Run Code Online (Sandbox Code Playgroud)
StartCalendarInterval应在12小时(中午如此)顶部运行程序.StartInterval应运行您的程序,每2小时(=7200秒)LimitLoadToSessionType一个水上会议开始时,你的程序(用户实际登录到窗口服务器只加载(所以这将阻止加载如果用户ssh的中)RunAtLoad告诉可执行文件加载的plist时运行.结合使用LimitLoadToSessionType,应该在用户登录时启动可执行文件.这有可能是StartInterval和StartCalendarInterval是互斥的.如果是这种情况,您可以取出StartInterval密钥并将内容更改StartCalendarInterval为:
<key>StartCalendarInterval</key>
<array>
<dictionary>
<key>Hour</key>
<integer>0</integer>
</dictionary>
<dictionary>
<key>Hour</key>
<integer>2</integer>
</dictionary>
<dictionary>
<key>Hour</key>
<integer>4</integer>
</dictionary>
<dictionary>
<key>Hour</key>
<integer>6</integer>
</dictionary>
...
<dictionary>
<key>Hour</key>
<integer>12</integer>
</dictionary>
...
<dictionary>
<key>Hour</key>
<integer>22</integer>
</dictionary>
</array>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅man launchd.plist.
| 归档时间: |
|
| 查看次数: |
1596 次 |
| 最近记录: |