June 13, 2015

macOSで定刻にプログラムを実行させる

macOSで決まった時刻にプログラムを実行させたいので、UNIXやLinuxのcron、Windowsのタスクスケジューラに相当する機能がないか調べた。Mac Developer Libraryを覗くと、Scheduling Timed Jobsにジョブに関する記述があり、まとめると以下のようになる。 プログラムを定時実行させる場合は、launchdジョブとcronジョブが使える 好ましいのはlaunchdのジョブを使うことである。cronは非推奨だ launchdジョブの定義 launchdジョブはプロパティリストファイル(.plist)で定義する。記述方法はA launchd Tutorialをはじめとするリンクを参考資料にまとめたので、そちらをみてほしい。 launchdジョブの配置場所 launchdジョブは用途によって設置場所が異なる。 launchdジョブ定義ファイルの配置場所 配置場所 用途 ~/Library/LaunchAgents 各ユーザが管理するエージェントを設定 /Library/LaunchAgents 管理者が管理するエージェントを設定 /Library/LaunchDaemons 管理者が管理するデーモンを設定 /System/Library/LaunchAgents OSが管理するエージェントを設定 /System/Library/LaunchDaemons OSが管理するデーモンを設定 デーモンはシステムレベルで実行されるジョブのことを指す。従ってroot権限を必要とする。そして、LaunchDaemonsディレクトリはユーザディレクトリには存在しない。エージェントはログインしているユーザ毎に実行されるジョブを指す。 例えば、特定のユーザ用のジョブなら、下記のようにコマンドを実行する。 $ launchctl load ~/Library/LaunchAgents/com.hiroakit.hoge.plist # 登録 $ launchctl list com.hiroakit.hoge # 確認 $ launchctl unload ~/Library/LaunchAgents/com.hiroakit.hoge.plist # 登録解除 実行したlaunchdジョブのログ 実行結果は、原則として/var/log/system.logに出力される。 Read more