Cocoa(和Mac OS X)安排程序运行的最佳方法是什么:
除了调度之外,如果用户删除应用程序,也应该很容易取消安排程序并且不会导致错误。
本质上,该程序是一个卫星命令行可执行文件,位于同一.app
捆绑包中的主应用程序文件旁边。该程序的目的是在用户的主目录中(~/Library/Application Support/MyApp
内)进行一些后台数据更新。)
crontab
是否适合这个? man
的{{1}}页面表示该功能已被crontab
吸收,但我似乎无法找到如何安排特定时间来运行该实用程序。
感谢。
答案 0 :(得分:5)
launchd
是执行此操作的正确方法(在Mac上弃用crontab
,而不是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/>
StartCalendarInterval
应该在第12个小时(中午)的顶部运行您的程序。StartInterval
应该每2小时(= 7200秒)运行一次程序LimitLoadToSessionType
仅在Aqua会话开始时加载您的程序(用户实际登录到窗口服务器(如果用户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>
有关详细信息,请参阅man launchd.plist
。
答案 1 :(得分:2)
有一个很棒的GUI应用程序叫做Lingon,可以帮助编辑launchd配置文件。 你可以在这里下载&gt; Lingon
答案 2 :(得分:0)
在Mac OS X上,您可以在终端中运行“crontab -e”以启动crontab编辑器(默认情况下为Vi)。退出编辑器时,作业已安排。