gpt4 book ai didi

cocoa - Cocoa 的计划任务?

转载 作者:行者123 更新时间:2023-12-03 16:13:20 25 4
gpt4 key购买 nike

Cocoa(和 Mac OS X)中安排程序运行的最佳方式是什么:

  • 当用户登录时。
  • 一天中的某些时间(例如:中午 12:00)。
  • 以一定的时间间隔(例如:每两小时)。

除了调度之外,还应该能够轻松地取消调度程序,并且在用户删除应用程序时不会导致错误。

本质上,该程序是一个卫星命令行可执行文件,位于同一 .app 包中主应用程序文件旁边。该程序的目的是在用户的主目录(在 ~/Library/Application Support/MyApp 内)进行一些后台数据更新。

crontab 是一个很好的选择吗? crontabman 页面说该功能已被 launchctl 吸收,但我似乎找不到如何安排特定时间运行该实用程序。

谢谢。

最佳答案

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 session 开始时加载您的程序(用户实际登录到窗口服务器)(因此,如果用户 ssh 的中)
  • RunAtLoad 告诉可执行文件在加载 plist 时运行。这与 LimitLoadToSessionType 相结合,应该在用户登录时启动可执行文件。

StartIntervalStartCalendarInterval 可能是互斥的。如果是这种情况,您可以取出 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

关于cocoa - Cocoa 的计划任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4287611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com