Ubuntu cron pythonの実行ログ確認方法

Server

cronでpythonを定期実行したあとにログを確認する方法

実行ログの保存先指定、ログの解析について調べてみました

・環境

ubuntu 20.04

・cronサービスの状態を確認

cronが正しく動作しているかを確認します

sudo systemctl status cron

以下のようにActiveになっていればOKです

● cron.service - Regular background program processing daemon
     Loaded: loaded (/usr/lib/systemd/system/cron.service; enabled; preset: enabled)
     Active: active (running) since Sat 2024-12-07 22:08:43 JST; 3 days ago

Activeでなければ、以下のコマンドでcronを起動します

sudo systemctl start cron

その後、以下のコマンドでcronを有効化します

sudo systemctl enable cron

・ログの出力先指定

以下の設定ファイルを編集します

sudo nano /etc/rsyslog.d/50-default.conf

このファイルは、システムログの収集、保存、転送に関する設定を定義しています
このファイル内の以下の部分のコメントアウトを外してcronのログの保存場所を指定します

#cron.*                          /var/log/cron.log

Ubuntu 20.04では、cronの実行ログは主に/var/log/syslogに記録されます

ファイルを編集した後、rsyslog サービスを再起動して設定を反映させます

sudo systemctl restart rsyslog

・cronログの抽出

cronログを確認するsyslogファイルからcronに関連するログをgrepコマンドで抽出します

sudo grep CRON /var/log/syslog

このコマンドで、cronジョブの実行ログがフィルタリングされます。

出力例

2024-12-11T04:30:01.524851+09:00 ホストネーム CRON[611073]: (ユーザー名) CMD (/home/user/bin/python /home/user/test.py)

こんな感じでcronのログが大量に表示されると思います

リアルタイムにログを監視したい場合は以下のコマンドを使用します

sudo tail -f /var/log/syslog | grep CRON

・ジョブの出力ログを記録する

cronジョブで実行したスクリプトやコマンドの出力(標準出力・標準エラー出力)は、デフォルトではsyslogには記録されません。そのため、リダイレクトを使ってログに保存する必要があります

リダイレクトの設定例

crontabの編集で以下のコマンドを追加します

* * * * * /path/to/script.sh >> /var/log/cron_job.log 2>&1

>>: 標準出力を指定したファイルに追記します

2>&1: 標準エラー出力を標準出力に結合します

カスタムログの確認

上記の設定で出力されたログは/var/log/cron_job.logに保存されます
まだこのファイルがない場合は作成します
以下のコマンドでログファイルを作成します

sudo touch /var/log/cron_job.log

このファイルの書き込み権限を確認します

ls -l /var/log/cron_job.log

以下のようにrootしか書き込み権限がありませんので変更していきます

-rw-r--r-- 1 root root 0 12月 12 05:48 /var/log/cron_job.log

/var/log/cron_job.logの所有権をsudoグループに変更します

sudo chgrp sudo /var/log/cron_job.log

グループにも書き込み権限を付与します

sudo chmod 664 /var/log/cron_job.log

再度、権限を確認すると以下のように所有グループがsudoになり、グループにも書き込み権限が与えられました

-rw-rw-r-- 1 root sudo 0 12月 12 05:48 /var/log/cron_job.log

・ログファイル確認

実行ログを確認します

cat /var/log/cron_job.log

コメント