Mac で cron を使うにはどうしたらいいかをざっくりまとめる.
あいにくMacにはcronデーモンがない.
しかし,launchdがcronと同じ挙動をするのでそれを使う.
定期的に実行するにはplistファイルを書き,launchdにロードする必要がある.
plistはsample.plist
を参照.
plistファイルを書いたら,launchdが認識するディレクトリへファイルを入れる必要がある.
また,ディレクトリによって実行権限が異なるらしい.
ユーザー単位での処理ならば,~/Library/LaunchAgents
に入れる.
直接ファイルを置いてもいいが,シンボリックリンクのほうが個人的にはいいと思う.
$ launchctl load hoge.plist
plistファイルを更新したら,一度解除した上で再度登録する必要がある.
$ launchctl unload hoge.plist && launchctl load hoge.plist
cronと同様に分,時,日,月,曜日を指定してやることで任意のタイミングで実行できる.
分,時,日,月,曜日を指定する順番に特に決まりはない?
分かりやすいように書けばいいだろう.
Minute <integer>
The minute on which this job will be run.
Hour <integer>
The hour on which this job will be run.
Day <integer>
The day on which this job will be run.
Weekday <integer>
The weekday on which this job will be run (0 and 7 are Sunday).
Month <integer>
The month on which this job will be run.
- キーが無い場合にはcrontabの'*'と同じくワイルドカード扱い
- 値は整数限定で'*/2'などの表記は不可
- 毎分実行するならStartIntervalキーを使う
- StartInterval は秒間隔
- 毎分実行するならStartIntervalキーを使う
0時,4時,6時,20時それぞれの正時を指定する場合.
<key>StandardCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>0</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<dict>
<key>Hour</key>
<integer>4</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<dict>
<key>Hour</key>
<integer>6</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<dict>
<key>Hour</key>
<integer>20</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
</array>
時と分を各々dictの中に一つだけ入れておくと,指定した分と指定した時の各分で起動してしまう.
↑の例は正しい(はず)
注意点
- 指定した時刻のときにスリープモードだった場合,起動時にスクリプトが実行される