
出力をログに記録したい cron ジョブがあります。cron ファイル ( crontab -e
) は次のとおりです。
0 7 * * * node $HOME/server/task.js >> $HOME/server/log.txt
cron タスクは次のように呼び出されます:
$ grep CRON /var/log/syslog
Nov 4 07:00:01 ip-... CRON[0000]: (bitnami) CMD (node $HOME/server/task.js >> $HOME/server/task.txt)
Nov 4 07:00:01 ip-... CRON[0000]: (CRON) info (No MTA installed, discarding output)
エラーのある行は、メールがインストールされていません、でもそうしたくもない。
NodeJS タスクの最初の行で が使用されている場合、出力ファイルは空になりますconsole.log()
。
cronジョブが実行されないことを確認しました。
何が間違っているのかをデバッグし、cron を実行して、結果をファイルに保存するにはどうすればよいでしょうか?
答え1
デフォルトでは、cronジョブの出力はスクリプトを実行しているユーザーにメールで送信されます。MTAがインストールされていませんシステムにメールエージェントがインストールされていないためです。
最初の syslog 行に見られるように、スクリプトは実際に実行されています。ここでの問題は、標準出力にリダイレクトされない出力にあります。
そこで、cron ジョブを編集してみてください:
0 7 * * * node $HOME/server/task.js >> $HOME/server/log.txt 2>&1