Amazon Linux 2023 で (cron では無く) systemd を使って venv 環境の Python を定期実行する
「Linux で定期的にジョブを実行する」場合、cron が広く使われていました。 しかし昨今の Linux には cron が同梱されないものも増えつつあり、Amazon Linux 2023 も公式ドキュメントである AL2023 では非推奨 にも記載されている通り、今後は (cron では無く) Systemd Timer を利用することが推奨されています。 今回は Amazon Linux 2023 で Systemd Timer を使って定期ジョブを設定する方法をメモしておきます。
事前に Amazon Linux 2023 へ asdf / direnv / uv をインストールして Python 環境を構築する の手順に従って環境構築されており、実行したいジョブは「Python の仮想環境内に存在する」という前提です。
検証環境¶
Amazon Linux 2023 は ARM 版の t4g.micro インストールを利用しました。
対象 | バージョン |
---|---|
Amazon Linux | 2023.6.20241031 |
Systemd 用ユニットファイルの用意¶
Systemd 用に「タイマー」と「サービス」の定義ファイルを用意します。
/etc/systemd/system/sample.timer¶
1 2 3 4 5 6 7 8 9 10 |
|
/etc/systemd/system/sample.service¶
/opt/sample
は Python の venv で作成された仮想環境です。 このディレクトリを WorkingDirectory
として指定することで direnv で自動的に仮想環境が Activate されます。
1 2 3 4 5 6 7 8 9 10 11 |
|
タイマーの開始¶
ユニットファイルを追加した為、systemctl daemon-reload
を実行してファイル追加を認識させます。
systemctl daemon-reload
タイマーを開始します。
systemctl start sample.timer
systemctl enable sample.timer
動作ログは journalctl -u sample.timer
を確認します。 また「スケジューリング状況」(次、いつ実行されるのか?) を確認したい場合は systemctl list-timers
を実行します。