OS X の Launch Agents で自動起動する
OSX では launchctl を導入されている。すべてのプロセスはここから始まる。
Launch agent でできる事
launchctl コマンドを使えば、自動起動するスクリプトを作ることが出来る。
どんな時にもイベントで起動するのでちょっと便利
- StartOnMount : デバイスがマウントされた時
- WatchPaths: ファイルの変更を監視する
- RunAtLoad : ログイン時に起動する
- OnDemand : 自動起動を一時停止し、イベント等の明示的な起動のみにする。
- OtherJobEnabled
などなどのタイミングで起動することが出来る。
登録済みの一覧を見る
launchctl list
実行例
takuya@rena:~/Desktop$ launchctl list | head PID Status Label - 0 com.apple.CoreAuthentication.daemon 66801 0 com.apple.quicklook - 0 com.apple.parentalcontrols.check 294 0 com.apple.Finder 1787 0 com.apple.xpc.launchd.oneshot.0x10000008.Karabiner_AXNotifier - 0 com.apple.PackageKit.InstallStatus - 0 com.apple.FontWorker
登録した詳細を見る
launchctl list 名前
実行例:実際のコマンド
takuya@rena:~/Desktop$ launchctl list com.apple.wifi.WiFiAgent { "LimitLoadToSessionType" = "Aqua"; "MachServices" = { "com.apple.wifi.WiFiAgent" = mach-port-object; }; "Label" = "com.apple.wifi.WiFiAgent"; "TimeOut" = 30; "OnDemand" = true; "LastExitStatus" = 0; "PID" = 1260; "Program" = "/System/Library/CoreServices/WiFiAgent.app/Contents/MacOS/WiFiAgent"; "PerJobMachServices" = { "com.apple.tsm.portname" = mach-port-object; "com.apple.CFPasteboardClient" = mach-port-object; "com.apple.axserver" = mach-port-object; }; };
登録内容をJSONで表示することが出来る。便利。
新規登録
なにかタスクを登録するには。
- xml で plist を作成
- launchctl load でロード
- launchctl list でロード確認
XML でplist を作成する
以下は、WiFiの接続状況を監視し、SSIDが変わればwispr的な何かを実行するプログラム。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>biz.takuya.wispr</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/ssid.rb</string> </array> <key>RunAtLoad</key> <true/> <key>StandardErrorPath</key> <string>/dev/null</string><!-- <string>/tmp/error</string> --> <key>StandardOutPath</key> <string>/dev/null</string> <key>WatchPaths</key> <array> <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string> </array> </dict> </plist>
- Label - String - ここが名前になる。list で表示される。ユニーク名をつける。ドメインの逆が一般的
- ProgramArguments - ここに実行したいコマンドと、引数を書く
- WatchPaths - 今回はファイル監視。監視するパスを書く
- StandardOutPath/StandardErrorPath - STDOUT/STDERR のリダイレクト先
xmlを作ったら、シンタックスチェック
plutil -lint biz.takuya.wispr.plist
plutil コマンドで plist のシンタックスチェックを実行し、エラーをチェックすることが出来る。
launch load コマンドでロード
launchctl load hogehoge.xml.plist
ロードする
ロードの確認
launchctl list | grep <LABEL>
登録したものを削除する
launchctl unload <LABEL>
launch Agent のplist の記述方法詳細
man launchd.plist
関連資料
Gmail通知を快適に、自動起動、常駐させた。 - それマグで!