launchdを使ってMac Os X でスクリプトの定期実行を登録する

みなさん、こんにちは。
まだまだ暑い日が続いてますね、渋谷です。
今回はMac OS X でスクリプトを定期実行してみたいと思います。
定期実行と聞くとcron
を思い浮かべる方が多いかと思いますが、今回はlaunchd
を使ってみようと思います。
実行するスクリプトですが、私が前回の記事で書いたスクリプトで良さそうです。
launchdとは
launchdはデーモン、アプリケーション、プロセス、スクリプトの起動・停止・管理を行う、オープンソースのサービス管理フレームワークである。
出典:launchd – Wikipedia
launchdの設定ファイルはXML形式で記述し、拡張子はplist(プロパティリスト)です。
ファイルの置き場所は以下の通りです。
– ~/Library/LaunchAgents ・・・ユーザーが管理するユーザー毎のエージェント
– /Library/LaunchAgents ・・・管理者が管理するユーザー毎のエージェント
– /Library/LaunchDaemons ・・・管理者が管理するシステム全体のデーモン
– /System/Library/LaunchAgents ・・・OSが管理するユーザー毎のエージェント
– /System/Library/LaunchDaemons ・・・OSが管理するシステム全体のデーモン
※エージェント・・・ユーザー単位で起動される。
※デーモン・・・システム全体で1つだけ起動される。
設定ファイルの記述
ファイル名はarticle.plist
で作成し、~/Library/LaunchAgents
直下に置くこととします。
スケジューリングですが、今回は平日の朝8時10分に実行されるように設定してみます。
<!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>article</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/python3</string>
<string><path>/scraping.py</string>
<string>blockchain</string>
</array>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Weekday</key>
<integer>1</integer>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>10</integer>
</dict>
<dict>
<key>Weekday</key>
<integer>2</integer>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>10</integer>
</dict>
<dict>
<key>Weekday</key>
<integer>3</integer>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>10</integer>
</dict>
<dict>
<key>Weekday</key>
<integer>4</integer>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>10</integer>
</dict>
<dict>
<key>Weekday</key>
<integer>5</integer>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>10</integer>
</dict>
</array>
<key>StandardOutPath</key>
<string>/dev/null</string>
<key>StandardErrorPath</key>
<string>/dev/null</string>
</dict>
</plist>
<dict>
タグ内はkey-valueとなっています。
- Label・・・ジョブの名前で、一意でなければならない(必須)
- ProgramArguments・・・実行するプログラム、オプション、引数などを指定する(必須)
- StartCalendarInterval・・・実行のスケジューリング
- StandardOutPath・・・ログの置き場所
- StandardErrorPath・・・エラーログの置き場所
登録
下記コマンドを実行することで、設定を登録できます。
launchctl load ~/Library/LaunchAgents/article.plist
解除
下記コマンドで登録の解除ができます。
launchctl unload ~/Library/LaunchAgents/article.plist
まとめ
業務でcronを使う事はありましたが、launchdを使った事はなかったので今回使ってみました。
launchdには登録時に設定できるオプションなど、紹介していないものもあるので気になった方は使ってみてはいかがでしょうか。