【Ubuntu】cronでPythonプログラムを定期的に実行する方法
Ubuntuでプログラムを定期的に実行するcronの設定方法について解説します。今回はPythonプログラムを実行する例を挙げていますが注意点があるので併せて紹介します。
crontabコマンドでcronを設定する
まずどのようなタイミングで難のスクリプトを実行するか設定する必要があります。crontab -e
コマンドを実行してみましょう。まず最初にエディタの選択が求められます。特に希望なければデフォルトの1を選択しましょう。
$ crontab -e no crontab for lenovo-server - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.tiny 3. /usr/bin/code 4. /bin/ed Choose 1-4 [1]: select-editor
以下のように設定ファイルが現れます。
最初はすべてコメント文となっています。一番下に「分 時間 日 月 年 実行コマンド」という並びで設定を書きます。指定しない箇所はアスタリスク(*)で埋めます。最後に実行コマンドを指定します。以下が例となります。
# 分 時間 日 月 年 実行コマンド #毎日7:20に実行する場合の例 20 7 * * * * (実行コマンド) #5分おきに実行する場合の例 * /5 * * * * (実行コマンド)
cronではフルパスで設定する必要あり
注意する点として、cronはOSに設定された環境変数を引き継いでくれません。なので例えばPythonなら通常「python3 hoge.py」とするところを「/usr/bin/python3」のようにフルパスで指定する必要があります。
以下は5分おきにhoge.pyを実行する例となります。
*/5 * * * * /usr/bin/python3 /home/myhome/usdjpy.py
ちなみにですが、日本語フォルダ名はやめておいた方が良いでしょう。
cronの状態確認
以下のコマンドでactive (running)と表示されればcronは起動しています。上で設定した通りに実行されます。
$ systemctl status cron ● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-09-15 18:13:53 JST; 10h ago Docs: man:cron(8) Main PID: 491 (cron) Tasks: 1 (limit: 9344) Memory: 448.0K CPU: 970ms CGroup: /system.slice/cron.service └─491 /usr/sbin/cron -f -P
cronサービスの起動と停止コマンド
もしcronが停止している場合は以下のコマンドを参考に起動しましょう。
# cronの起動 $ systemctl start cron # cronの停止 $ systemctl stop cron # cronの再起動 $ systemctl restart cron
cronの実行ログを見る
設定したタイミングで実行されたか確認するためのコマンドです。
$ journalctl -r -u cron 9月 17 06:50:02 myserver-ThinkCentre-M73 CRON[43037]: pam_unix(cron:session): session clo> 9月 17 06:50:02 myserver-ThinkCentre-M73 CRON[43037]: (CRON) info (No MTA installed, disc> 9月 17 06:50:01 myserver-ThinkCentre-M73 CRON[43038]: (my-server) CMD (/usr/bin/pytho> 9月 17 06:50:01 myserver-ThinkCentre-M73 CRON[43037]: pam_unix(cron:session): session ope> 9月 17 06:45:01 myserver-ThinkCentre-M73 CRON[42924]: pam_unix(cron:session): session clo> 9月 17 06:45:01 myserver-ThinkCentre-M73 CRON[42924]: (CRON) info (No MTA installed, disc> 9月 17 06:45:01 myserver-ThinkCentre-M73 CRON[42925]: (my-server) CMD (/usr/bin/pytho> 9月 17 06:45:01 myserver-ThinkCentre-M73 CRON[42924]: pam_unix(cron:session): session ope> 9月 17 06:40:01 myserver-ThinkCentre-M73 CRON[42894]: pam_unix(cron:session): session clo> 9月 17 06:40:01 myserver-ThinkCentre-M73 CRON[42894]: (CRON) info (No MTA installed, disc> 9月 17 06:40:01 myserver-ThinkCentre-M73 CRON[42895]: (my-server) CMD (/usr/bin/pytho> 9月 17 06:40:01 myserver-ThinkCentre-M73 CRON[42894]: pam_unix(cron:session): session ope> 9月 17 06:35:02 myserver-ThinkCentre-M73 CRON[42873]: pam_unix(cron:session): session clo> 9月 17 06:35:02 myserver-ThinkCentre-M73 CRON[42873]: (CRON) info (No MTA installed, disc> 9月 17 06:35:01 myserver-ThinkCentre-M73 CRON[42874]: (my-server) CMD (/usr/bin/pytho> 9月 17 06:35:01 myserver-ThinkCentre-M73 CRON[42873]: pam_unix(cron:session): session ope> 9月 17 06:30:01 myserver-ThinkCentre-M73 CRON[42850]: pam_unix(cron:session): session clo> 9月 17 06:30:01 myserver-ThinkCentre-M73 CRON[42850]: (CRON) info (No MTA installed, disc> 9月 17 06:30:01 myserver-ThinkCentre-M73 CRON[42851]: (my-server) CMD (/usr/bin/pytho>
スポンサーリンク