Java実行可能ファイル。Javaコードは、エラーとメッセージをログに記録するために独自のクラスを使用します。ファイル。
しかし、スケジュールされた時間の後にログファイルをチェックしたとき、メッセージは記録されませんでした。実行が開始されたことを示す少なくとも1つのログメッセージがあるはずです。
そのため、2つの原因が考えられます。
指定されたログファイルにはchmod 777
パーミッションなので、ここでの2番目の原因だと思います。
Crontabジョブがスケジュールされた時間に実行されないのはなぜですか?そして、どのようなロギングも行わずにこれをどのようにデバッグしますか?
エラーがある場合、cronがユーザーにメールを送信することを読みました。ユーザーに関連付けられているメールアドレスを確認するにはどうすればよいですか?
問題を追跡するために、cronジョブのログを有効にすることができます。 /etc/rsyslog.conf or /etc/rsyslog.d/50-default.conf
(Ubuntuで)ファイルを編集し、次の行のコメントを外すか、行がない場合は追加する必要があります。
cron.* /var/log/cron.log
次に、rsyslog
とcron
を再起動します。
Sudo service rsyslog restart
Sudo service cron restart
Cronジョブは/var/log/cron.log
にログを記録します。
Crontabコマンドの末尾に2>&1を追加します。これにより、stderr出力がstdoutにリダイレクトされます。次に、crontabのUnixコマンドを記録していることを確認します。
0 0,12 1 */2 * /sbin/ping -c 192.168.0.1; ls -la >>/var/log/cronrun 2>&1
これにより、Unixコマンドからすべてがキャプチャされます。
いくつかの追加のヒント(先日同僚を助けた後...)。パラメーターなしでコマンドセットを発行して、環境変数を書き出します。そして、シェルにset -xコマンドを使用して各コマンドをエコーさせます。スクリプトの問題の先頭。
set
set -x
コマンドを手動で実行してもCronでは実行できないと仮定すると、cronコマンドに正しいパスが公開されていない可能性があります。これを修正するには、crontab -eを実行し、cronタブに直接パスを入力します。
# Export the path so that the scripts run correctly PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin
問題を引き起こしている可能性のあることの1つは、cron
(少なくとも私が使用しているディストリビューション、Amazon Linux OS)は時刻がUTCであると見なすことです。したがって、異なるタイムゾーン(たとえば-03: 00)実際に問題が発生することはなく、実際には問題がないことを3時間前に実行すると予想される場合があります。
うまく動作する必要がある時間を本当にフォーマットしたかどうかを確認します。
たとえば
*/1 * * * * echo 'debug' > /home/glab/change_branch.log
これかもしれません:
1 * * * * echo 'debug' > /home/glab/change_branch.log
そして、あなたはそれが毎分実行されると期待しているかもしれません。また、ログも生成されません。