Đây là một biến thể khác mà tôi đã sử dụng thành công trong nhiều năm - nắm bắt đầu ra và chỉ in ra khi có lỗi , kích hoạt email. Điều này không yêu cầu tệp tạm thời và bảo toàn tất cả đầu ra . Phần quan trọng là 2>&1
chuyển hướng STDERR sang STDOUT.
Gửi toàn bộ đầu ra thông qua cấu hình mail cron mặc định:
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT"
Tương tự nhưng với một địa chỉ và chủ đề cụ thể:
(địa chỉ cũng có thể được thay đổi bằng cách đặt MAILTO = xxxx cho toàn bộ tệp crontab)
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT" | mail -s "Failed to backup" an@email.address
Bạn thậm chí có thể thực hiện nhiều hành động do lỗi và thêm vào email:
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || {echo "$OUTPUT" ; ls -ltr /backup/dir ; }
Điều này sẽ làm việc cho các lệnh đơn giản. Nếu bạn đang xử lý các đường ống phức tạp ( find / -type f | grep -v bla | tar something-or-other
), thì tốt hơn hết bạn nên chuyển lệnh thành tập lệnh và chạy tập lệnh bằng cách sử dụng phương pháp đã nói ở trên. Lý do là nếu bất kỳ phần nào của đường ống xuất ra STDERR, bạn vẫn sẽ nhận được email.