답변:
php /path/to/script.php > logfile || cat logfile; rm logfile
이 logfile
스크립트 는 표준 출력을 덤프 하고 스크립트가 실패한 경우에만 출력합니다 (0이 아닌 경우).
참고 : 스크립트가로 출력 될 수도 있으면로 stderr
리디렉션해야 stderr
합니다 stdout
. 그렇지 않으면 stderr
종료 코드가 0 인 경우에도 인쇄 할 내용 이 있으면 cron에서 전자 메일을 보내 게됩니다.
php /path/to/script.php > logfile 2>&1 || cat logfile; rm logfile
종료 상태를 알기 전에 출력이 생성되므로 어딘가에 저장해야합니다.
한 가지 가능성은 쉘 변수에 저장하는 것입니다.
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