Crontabに次のエントリがあります。
0 5 * * * /bin/bash -l -c 'export Rails_ENV=my_env; cd /my_folder; ./script/my_script.rb 2>&1 > ./log/my_log.log'
この結果、./script/my_script.rb
の./log/my_log.log
の出力を受信しています。この動作は望ましいものです。不思議なのは、ローカルメールで出力も受信していることです。スクリプトの出力がメールでどのようにキャプチャされているのかと思います。出力をログファイルにリダイレクトしているので、cronジョブには出力がなく、cronジョブの実行時にメールを受信しないと思います。メールが./script/my_script.rb
の出力をどのように取得できるかについて誰かが光を当てることができますか?
リダイレクトの順序が正しくありません。 stderrはファイルにリダイレクトされていませんが、stdoutに送信されています。これは、メールで受信する必要があるものです。
Cronジョブを次のように変更して、リダイレクトを修正します。
0 5 * * * /bin/bash -l -c
'export Rails_ENV=my_env;
cd /my_folder;
./script/my_script.rb > ./log/my_log.log 2>&1'
入れ替えてみてください2>&1
と> ./log/my_log.log
。
この答え で判断すると、リダイレクトの順序を切り替えるだけです。
0 5 * * * /bin/bash -l -c 'export Rails_ENV=my_env; cd /my_folder; ./script/my_script.rb > ./log/my_log.log 2>&1'