非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【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>
 

 

スポンサーリンク

 - Linux, Python