Cocoa的预定任务?

Cocoa的预定任务?,cocoa,macos,scheduled-tasks,crontab,launchd,Cocoa,Macos,Scheduled Tasks,Crontab,Launchd,Cocoa(和Mac OS X)中计划运行程序的最佳方式是什么: 当用户登录时 在一天中的某些时间(例如:中午12:00) 在特定的时间间隔(例如:每两小时) 除了调度之外,如果用户删除应用程序,还应该很容易取消调度程序,并且不会导致错误 本质上,该程序是一个卫星命令行可执行文件,位于同一.app捆绑包中主应用程序文件的旁边。该程序的目的是在用户的主目录(在~/Library/Application Support/MyApp中)中进行一些后台数据更新 crontab是一个很好的选择吗?cr

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

  • 当用户登录时
  • 在一天中的某些时间(例如:中午12:00)
  • 在特定的时间间隔(例如:每两小时)
除了调度之外,如果用户删除应用程序,还应该很容易取消调度程序,并且不会导致错误

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

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


谢谢。

在Mac OS X上,您可以在终端中运行“crontab-e”以启动crontab编辑器(默认情况下为Vi)。退出编辑器时,作业将被安排。

launchd
是执行此操作的正确方法(
crontab
在Mac上被弃用,取而代之的是
launchd
)。您将创建一个包含程序信息(可执行文件名、参数等)的plist文件,其中一部分将是(在浏览器中键入警告且未测试):


有关更多信息,请参阅
manlaunchd.plist

有一个名为Lingon的漂亮GUI应用程序,可帮助编辑启动配置文件。
您可以在此处下载>

此解决方案是一个不错的选择,在大多数情况下是最好的。但当需要在沙箱模式下创建动态可配置任务时,这是不可能的。在更改系统日期时,即使时间与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/>
<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>