macでプログラムを定期実行してみた(launchdを使う)【2024/2/11更新】

はじめに

以前、feedparserライブラリを使って、RSS feedを自動抽出してみた(毎日のニュースチェックの自動化)という記事を書きました。

毎日決まった時間に定期実行してもらいたいので、macのlaunchdを使ってみました。

今回は以下の記事を参考にして書きました。ありがとうございます。

launchdで定期的にスクリプトを実行

MacOSのlaunchdで定期処理を登録する

plistファイルの構文チェック

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が推奨されています。

定期実行できるととても便利になりますね。

コメント

タイトルとURLをコピーしました