に出力できるプログラムを書きますstderr
。Linuxcrontab
で実行する場合は、stderr
. そうでない場合、プログラムは . で終了しSIGPIPE
ます。なんで?
良くないですよ
45 10 * * * /home/sandy/test > /home/sandy/test.log &
わかった
45 10 * * * /home/sandy/test > /home/sandy/test.log 2>&1 &
バックグラウンドでコマンドを実行しています(&
最後に)。これは、コマンドを実行するために cron が開始したシェルが完了を待たず、コマンドが開始されるとすぐに終了することを意味します。プログラムが に書き込もうとするstderr
と、読み取り側には何も接続されず、SIGPIPE が発生します。ファイルにリダイレクトする場合、実行中のプロセスが書き込み先を知っているため、これは起こりません。
これを修正するもう 1 つの方法は、コマンドをフォアグラウンドで実行することです。つまり&
、最後に を付けずに実行します。とにかくこれはより良い練習です。