4

プログラムの実行をスケジュールするためのCocoa(およびMac OS X)の最良の方法は何ですか?

  • ユーザーがログインしたとき。
  • 1日の特定の時間(例:正午12:00)。
  • 特定の時間間隔で(たとえば、2時間ごと)。

スケジュールに加えて、プログラムのスケジュールを簡単に解除でき、ユーザーがアプリケーションを削除してもエラーが発生しないようにする必要があります。

.app基本的に、プログラムは、同じバンドル内のメインアプリケーションのファイルの隣に配置された衛星コマンドライン実行可能ファイルです。プログラムの目的は、ユーザーのホームディレクトリ(内~/Library/Application Support/MyApp)でバックグラウンドデータの更新を行うことです。

crontabこれの良い候補ですか?のmanページにcrontabは、機能が吸収されたと書かれていますがlaunchctl、ユーティリティを実行する特定の時間をスケジュールする方法が見つからないようです。

ありがとう。

4

3 に答える 3

6

launchdこれを行うための適切な方法です(crontabMacでは非推奨になりました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時間目(正午)にプログラムを実行する必要があります。
  • StartInterval2時間(= 7200秒)ごとにプログラムを実行する必要があります
  • Aquaセッションの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

于 2010-11-26T18:20:42.063 に答える
2

launchd 構成ファイルの編集に役立つ Lingon という優れた GUI アプリがあります。ここからダウンロードできます > Lingon

于 2010-11-26T18:27:51.670 に答える
0

Mac OS Xでは、ターミナルで「crontab -e」を実行して、crontabエディタ(デフォルトではVi)を起動できます。エディターを終了すると、ジョブがスケジュールされます。

于 2010-11-26T18:18:22.557 に答える