4

に出力できるプログラムを書きますstderr。Linuxcrontabで実行する場合は、stderr. そうでない場合、プログラムは . で終了しSIGPIPEます。なんで?

良くないですよ

45 10 * * * /home/sandy/test > /home/sandy/test.log &

わかった

45 10 * * * /home/sandy/test > /home/sandy/test.log 2>&1 &
4

2 に答える 2

4

バックグラウンドでコマンドを実行しています(&最後に)。これは、コマンドを実行するために cron が開始したシェルが完了を待たず、コマンドが開始されるとすぐに終了することを意味します。プログラムが に書き込もうとするstderrと、読み取り側には何も接続されず、SIGPIPE が発生します。ファイルにリダイレクトする場合、実行中のプロセスが書き込み先を知っているため、これは起こりません。

これを修正するもう 1 つの方法は、コマンドをフォアグラウンドで実行することです。つまり&、最後に を付けずに実行します。とにかくこれはより良い練習です。

于 2012-04-24T07:36:13.907 に答える
1

SIGPIPE読み取り側が閉じられているパイプ (またはソケット) に書き込もうとすると、プロセスに送信されます。cron は通常、リダイレクトされた場合を除き、指定されたコマンドの出力を電子メールで送信しようとしますstdoutstderrお使いのマシンでローカルの電子メール配信が正しく設定されておらず、cron によって開始された電子メール プログラムが実行stderr中に終了/home/sandy/testし、パイプが破損した可能性があります。

hereおよびhereから派生した回答

于 2012-04-24T07:35:19.867 に答える