Mac(OS X)ではcronじゃなくてlaunchdでやる
こんにちは。 前にcrontabの書き方についてこちらの記事に書きましたが、Macの場合はlaunchdを使ったほうが良いみたいです。
今回はlaunchdについて書きたいと思います。
launchdとは?
launchdはデーモン、アプリケーション、プロセス、スクリプトの起動・停止・管理を行う、オープンソースのサービス管理フレームワークです。(Wikipediaより)
まぁ簡単に言えばUnix系のinitやcrondの代わりをしてくれるものだと思います。
OS起動時に起動するものともいえると思います。
今回はこれをcronの代わりに使いたいと思います。
launchdのファイル構成
launchdの設定は、以下のディレクトリにlaunchd.plistを置き行います。
- ~/Library/LaunchAgents
各ユーザが管理するユーザごとに実行するエージェントを設定する - /Library/LaunchAgents
管理者が管理する各ユーザごとに実行するエージェントを設定する - /Library/LaunchDaemons
管理者が管理するシステム全体で実行するデーモンを設定する - /System/Library/LaunchAgents
OS が管理するユーザごとに実行するエージェントを設定する(基本的には触らない) - /System/Library/LaunchDaemons
OS が管理するシステム全体で実行するデーモンを設定する(基本的には触らない)
自分が実行したい内容によって設定ファイルを置く場所を変更します。
ちなみにエージェントは各ユーザ単位で起動されるサービスのことで、デーモンはシステム全体で一つだけ起動されるサービスのことです。
launchd.plistの記述
基本的にXMLベースで以下のように書きます。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>cycleBattery</string> <key>ProgramArguments</key> <array> <string>/usr/bin/ruby</string> <string>/Users/username/example.rb</string> </array> <key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>0</integer> <key>Minute</key> <integer>0</integer> </dict> <key>StandardOutPath</key> <string>/Users/username/output.txt</string> </dict> </plist>
ここで使っているキーや、よく使うキーの意味は以下の様になります。
key | value | 意味 |
---|---|---|
Lavel | string | 必須。管理するジョブの名前。一意にする必要がある。ファイル名から拡張子を抜いたものにするのが一般的らしいです。 |
ProgramArguments | array of string | 必須。実行するプログラムとオプション、引数などを指定する。つまりarrayタグの中に、実行したいコマンドをスペース区切りで順番にstringタグの中に書いていけば良い。 |
StartCalendarInterval | dict | 指定した日時に実行します。これがcrontabと同じような感じですね。 |
StandardOutPath | string | 実行結果(ログ)を指定したファイルに書く。デフォルトは/var/log/system.log に出力される。 |
StartInterval | Integer | 起動間隔を秒数で指定(一定時間ごとに実行) |
OnDemand | boolean | 起動のタイミングを要求があったときにするか常駐にするか。trueにすると要求があったときのみになり、falseは常駐。デフォルトは true。 |
設定したファイルをlaunchdへ登録
設定ファイルを書き終えたら、後はそれをlaunchdへで登録します。コマンドはlaunchctlです。
$ launchctl load ~/Library/LaunchAgents/example.plist $ launchctl list - 0 example $ launchctl unload ~/Library/LaunchAgents/example.plist
loadで登録、unloadで登録解除です。修正した場合は、一度unloadしてからloadして再読み込みします。
また、listで登録したものを確認することが出来ますが、多分多いのでgrepとかで絞り込んで見ると良いと思います。
以上です。
それでは。
参考にさせていただいたサイト
launchdをcronの代わりに使うための簡易メモ - Mekajikiの日記
LaunchDaemons (launchctl, launchd.plist) の使い方 - maruko2 Note.