นี่คือรูปแบบอื่นที่ฉันใช้สำเร็จมาหลายปีแล้ว - จับเอาท์พุทและพิมพ์ออกมาโดยมีข้อผิดพลาดเท่านั้นทำให้เกิดอีเมล นี้ไม่จำเป็นต้องไฟล์ temp และเก็บรักษาผลผลิตทั้งหมด ส่วนที่สำคัญคือการ2>&1
เปลี่ยนเส้นทาง STDERR ไปยัง STDOUT
ส่งเอาต์พุตทั้งหมดผ่านการกำหนดค่า cron mailer ที่เป็นค่าเริ่มต้น:
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT"
เหมือนกัน แต่มีที่อยู่เฉพาะและหัวเรื่อง:
(ที่อยู่สามารถเปลี่ยนแปลงได้โดยการตั้งค่าMAILTO = xxxxสำหรับไฟล์ crontab ทั้งหมด)
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT" | mail -s "Failed to backup" an@email.address
คุณสามารถดำเนินการหลายอย่างพร้อมกันเมื่อเกิดข้อผิดพลาดและเพิ่มไปยังอีเมล:
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || {echo "$OUTPUT" ; ls -ltr /backup/dir ; }
สิ่งนี้จะทำงานกับคำสั่งง่าย ๆ หากคุณกำลังจัดการกับ pipes ที่ซับซ้อน ( find / -type f | grep -v bla | tar something-or-other
) คุณควรย้ายคำสั่งไปยังสคริปต์และเรียกใช้สคริปต์โดยใช้วิธีการดังกล่าวข้างต้น เหตุผลก็คือถ้าส่วนใดส่วนหนึ่งของไพพ์ส่งออกไปยัง STDERR คุณจะยังคงได้รับอีเมล