はじめに
以前、feedparserライブラリを使って、RSS feedを自動抽出してみた(毎日のニュースチェックの自動化)という記事を書きました。
毎日決まった時間に定期実行してもらいたいので、macのlaunchdを使ってみました。
今回は以下の記事を参考にして書きました。ありがとうございます。
launchdとは?
**launchd
**はmacOSのシステムおよびセッションプロセスのマネージャーで、バックグラウンドで実行するタスクをスケジュールしたり、デーモンやエージェントを管理したりするために使用されます。定期的に実行するタスクや、特定の条件下で実行するタスクを設定し、管理することができます。
plistファイルを用意する
どのプログラムをどのタイミングで実行するかを指定した.plistファイルを用意します。
今回はpythonプログラムを実行する例を記載します。
日本語になっているところはご自分に合わせて書き換えてください。
ファイル名はcom.あなたの名前.タスクの名前.plist
とし、~/Library/LaunchAgents
に保存します。
<?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>com.あなたの名前.タスクの名前</string>
<key>ProgramArguments</key>
<array>
<string>pythonのパス</string>
<string>/実行したいプログラムのパス</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>19</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>StandardOutPath</key>
<string>標準出力の保存先のパス(.outファイル)</string>
<key>StandardErrorPath</key>
<string>標準エラーの保存先のパス(.errファイル)</string>
</dict>
</plist>
ここに何時何分に定期実行したいか記述します。この例では19:00に実行されます。
.plistの構文チェック
次のコマンドを実行すると、構文エラーをチェックしてくれます。
$ plutil -lint com.あなたの名前.タスクの名前.plist
launchctlにタスクを登録する
以下のコマンドを実行して、.plistに記載されたタスク「com.あなたの名前.タスクの名前」を登録します。
$ launchctl load com.あなたの名前.タスクの名前
タスクが登録されているか確認するには、
$ launchctl list | grep com.あなたの名前.タスクの名前
として、リストにタスクが載っているか確認します。
定期実行をやめたいとき
$ launchctl unload com.あなたの名前.タスクの名前
として、~/Library/LaunchAgentsに置いてあるcom.あなたの名前.タスクの名前.plistファイルを削除します。
.plistを修正したとき
いくつか方法があります。
一度タスクをunloadしてから、再度loadする
【2024/2/11更新】コードを修正しました。
$ launchctl unload unload ~/Library/LaunchAgents/com.あなたの名前.タスクの名前.plist
$ launchctl load unload ~/Library/LaunchAgents/com.あなたの名前.タスクの名前.plist
おわりに
Linuxの人はcronをつかえばいいのですが、macではlaunchdが推奨されています。
定期実行できるととても便利になりますね。
コメント