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
コメント