【Linux】cronからスクリプトを実行できない事象の調査手順

過去Qiitaに投稿していた記事を当サイトに移行しました。

Qiita
【Linux】cronからスクリプトを実行できない事象の調査手順 - Qiita はじめに自宅サーバにてcron設定すると良く詰まるので調査手順を纏めました!自分の見直し用でもあるので今後もエラー対応時に随時更新します!前提情報OS:ubuntu 20.04 LT...
目次

はじめに

自宅サーバにてcron設定すると良く詰まるので調査手順を纏めました。
自分の見直し用でもあるので今後もエラー対応時に随時更新します。

前提情報

OS:ubuntu 20.04 LTS

  • 「cron → bash → python」 の順で実行させたい
  • bashの手動実行は正常に稼働する
  • cronからの定期実行は実行されない

cronを使用する注意点

  • 環境変数を使う場合は配慮
  • 実行ユーザを配慮
  • スクリプトも含めフルパスで記述
  • スペルミス ←ここ重要!

cron.log出力

デフォルト設定ではcron.logは出力されないため下記の設定ファイルを編集しログを出力させる。

$ cd /etc/rsyslog.d
$ sudo vi 50-default.conf

50-default.conf

(変更前)
#cron.*                          /var/log/cron.log
(変更後)
cron.*                          /var/log/cron.log

私の自宅サーバ環境では10行目にcron設定項目がありました。
cron設定の反映は下記コマンドでrsyslogを再起動時に行われます。

$ sudo systemctl restart rsyslog

cron.logは下記コマンドにて確認できます。

(ログ全数出力)
$ cat /var/log/cron.log

(最新10件の出力)
$ tail /var/log/cron.log

参考サイト

server-memo.net
【Ubuntu】cronのログを/var/log/cron.logへ出力させる方法 Ubuntu Server 20.04でcronのログを/var/log/cron.logへ出力させる方法です。rsyslogの設定変更Ubuntu Server 20.04の初期設定では、rsyslogでcronの実行ログを/var/lo...

ログレベルの調整

cron.logを出力させるだけでは、メッセージ全件が出力されません。
そのため、エラーメッセージを出力するように下記の通り設定しログレベルを引き上げます。

$ sudo vi /etc/default/cron

/etc/default/cron

(最終行を追加)
# This file has been deprecated. Please add custom options for cron using
# $ systemctl edit cron.service
# or
# $ systemctl edit --full cron.service
EXTRA_OPTS='-L 15' #追加

設定反映は下記コマンドでcronを再起動します。

$ sudo /etc/init.d/cron restart

エラー時は下記のようにcron.logに表示されます。
2行目のExit Codeが確認できたらExit Codeでググります。

  • bashのExit Code一覧
Qiita
コマンドラインツールを書くなら知っておきたい Bash の 予約済み Exit Code - Qiita 先日下記のリンクを教えてもらってとても参考になったので,翻訳してみました.普段コマンドラインツールの Exit Code を適当に決めている僕みたいな人は一度目を通してお...

/var/log/cron.log (抜粋)

May 14 21:00:01 ubuntu CRON[23196]: (root) CMD ([23197] <<実行コマンド>>)
May 14 21:00:10 ubuntu CRON[23196]: (CRON) error (grandchild #23197 failed with exit status 1)
May 14 21:00:10 ubuntu CRON[23196]: (root) MAIL (mailed 1495 bytes of output but got status 0x004b from MTA#012)
May 14 21:00:10 ubuntu CRON[23196]: (root) END ([23197] <<実行コマンド>>)

スクリプトの標準出力

cronに設定しているスクリプトの標準エラーを出力させるように設定します。

* * * * * sudo sh /src/sample.sh >> /tmp/log/sample.log 2>&1

まとめ

何時間もエラー調査して結果的にスペルミスだったこともあるので、今一度スペルを確認すること!!!!!
(自戒の意味を込めて)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次