回答:
php /path/to/script.php > logfile || cat logfile; rm logfile
これによりlogfile
、標準出力がダンプされ、スクリプトが失敗した場合にのみ出力されます(ゼロ以外の値が出力されます)。
注:スクリプトもに出力するstderr
場合は、にリダイレクトstderr
する必要がありstdout
ます。そうしstderr
ないと、終了コードが0であっても、何かが出力されると、cronは電子メールを送信します。
php /path/to/script.php > logfile 2>&1 || cat logfile; rm logfile
出力は終了ステータスがわかる前に生成されるため、どこかに保存する必要があります。
1つの可能性は、それをシェル変数に格納することです。
output=$(php /path/to/script.php)
if [ $? -ne 0 ]; then
printf "%s\n" "$output"
fi
これはスクリプトの出力を完全に保存するわけではありません(後続の空白行を削除します)が、この使用例では問題ありません。末尾の空白行を保持したい場合:
output=$(php /path/to/script.php; ret=$?; echo a; exit $ret)
if [ $? -ne 0 ]; then
printf "%s" "${output%a}"
fi
潜在的に大量の出力がある場合は、代わりに一時ファイルに保存することをお勧めします。
output_file=$(mktemp /var/tmp/script.XXXXXXXXXX.out)
php /path/to/script.php >>"$output_file"
ret=$?
if [ $ret -ne 0 ]; then
echo "script.php failed (status $ret), see the output in $output_file"
fi