2010-11-26 129 views
4

什麼是Cocoa(和Mac OS X),以安排計劃的最佳方式來運行:Cocoa的計劃任務?

  • 當用戶登錄
  • 在一天的某些時間(例如:12: 00中午)。
  • 在一定的時間間隔(例如:每兩個小時)。

除了調度,還應該很容易取消調度程序,並且在用戶刪除應用程序時不會導致錯誤。

本質上,該程序是一個衛星命令行可執行文件,位於主應用程序文件的相同.app包內。該程序的目的是在用戶的主目錄中做一些後臺數據更新(在~/Library/Application Support/MyApp之內)。

crontab很好的候選者嗎? 頁面crontab表示功能已被吸收到launchctl,但我似乎無法找到如何安排特定時間來運行該實用程序。

感謝。

+0

這屬於超級用戶。 – jer 2010-11-26 18:15:26

回答

5

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/> 
  • StartCalendarInterval應在12小時的頂端運行你的程序(所以中午)。
  • StartInterval應該運行您的程序,每2小時(=7200秒)
  • 的水上會議開始時,LimitLoadToSessionType只加載程序(用戶實際登錄到窗口服務器(所以這將阻止加載如果用戶在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

+0

該解決方案是一個不錯的選擇,在大多數情況下是最好的選擇。但是,當需要在沙盒模式下創建動態可配置任務時,這是不可能的。 – mthama 2015-05-19 14:03:20

+0

更改系統日期時間應用程序會自動啓動,即使時間與plist時間不匹配 – 2017-07-04 13:43:17

0

在Mac OS X上,您可以在終端中運行「crontab -e」以啓動crontab編輯器(默認爲vi)。當您退出編輯器時,該作業會被安排。

2

有一個很好的圖形用戶界面應用程序叫做Lingon,它可以幫助編輯launchd配置文件。 您可以在這裏下載>Lingon