Chỉ gửi email về lỗi cron cho các công việc trong cron.d Daily, cron.hourly, v.v.


8

Tôi có một số công việc cron chạy (trong /etc/cron.daily, /etc/cron.hourly, /etc/cron.weekly, vv) và email root@localhostvới kết quả. Tôi muốn dừng những email đó nếu công việc đang thành công và chỉ email bị lỗi (mà tôi hiểu có thể được thực hiện bằng cách chuyển hướng stdoutđến /dev/null). Tôi hiểu làm thế nào để làm điều đó cho các công việc định kỳ riêng lẻ, nhưng các tập lệnh trong các thư mục đặc biệt đó được chạy bằng cách sử dụng run-parts. Cách tốt nhất để ngăn chặn các email thành công cho các tập lệnh đó là gì?

Câu trả lời:


5

Bạn có thể muốn sử dụng một trong các trình bao bọc cho các chương trình, nó xuất ra mọi thứ khi có vấn đề gì đó và nuốt tiêu chuẩn khác.

Một ví dụ có thể là mỉa mai , chỉ cần thêm từ 'mỉa mai' vào 'phần chạy', vd:

# m h dom mon dow user  command
 17 *  *   *   *  root  cd / && /etc/cronic run-parts --report /etc/cron.hourly

nơi /etc/croniclà một nơi với kịch bản mỉa mai thực thi, được tải xuống từ trang web được đề cập.


5

Bạn nên gửi thông báo email thành công để /dev/nullchúng biến mất.

Nhưng bạn muốn xem thông báo email không thành công .

Điều này có nghĩa là trước tiên bạn cần trực tiếp stdoutđến /dev/nullvà sau đó trực tiếp /dev/stderrđếnstdout

hãy thử thay đổi phần chuyển hướng của cronjobs của bạn thành

>/dev/null 2>&1

Xem liên kết này


Điều đó cũng không ngăn chặn các email lỗi (vì chúng sẽ không tạo ra bất kỳ đầu ra nào)? Ngoài ra, tôi cần phải làm điều này cho các cron.XXXthư mục của mình sử dụng run-parts, vì vậy nó không đơn giản như chuyển hướng cho các tập lệnh riêng lẻ.
jrdioko

Không có ý tưởng là stderrném đi sau đó stderr được chuyển hướng đến stdout. Tôi không chắc đó run-partslà gì , nhưng nó hoạt động chuyển hướng stdoutvà sau đó stderrdường như là cách.
pavium

Aha, tôi đã googled run-parts. Điều đó không làm phức tạp vấn đề, không phải nó. Có lẽ bạn nên tránh run-partsvà gọi riêng từng đoạn script.
pavium

À, tôi hiểu rồi. run-partschạy tất cả các tập lệnh trong các thư mục như thế /etc/cron.daily, vì vậy mánh khóe chuyển qua chuyển hướng đến các tập lệnh riêng lẻ mà nó đang chạy.
jrdioko

2
Bạn có chắc chắn về >/dev/null 2>&1bit? Tôi đã thử nghiệm nó và tất cả mọi thứ đến /dev/nullđó, nếu bạn bỏ 2>&1thiết bị xuất chuẩn duy nhất sẽ bị xóa.
jrdioko

1
  • Nếu tập lệnh được xử lý tốt, nó sẽ chỉ ghi STDOUTnếu thành công và STDERRtrong trường hợp có lỗi.
  • Theo mặc định, cron sẽ gửi tất cả mọi thứ mà tập lệnh ghi vào STDOUT hoặc STDERR ( Arch wiki ).

Vì vậy, nếu bạn muốn giữ thông báo lỗi, đừng chuyển hướng STDERR, chỉ cần STDOUT:

COMMAND > /dev/null

Nếu bạn làm điển hình >/dev/null 2>&1, bạn đang ngăn chặn hiệu quả cả hai ( tài liệu bash ).

  1. Tạo stdinmô tả tệp thành bản sao của / dev / null.
  2. Đặt stderrmô tả tệp thành bản sao của stdout(đã được trỏ đến / dev / null).

Ngay cả khi điều này không trả lời đầy đủ câu hỏi ban đầu, nó vẫn giải quyết một số lỗi trong câu trả lời của pavium .
morallo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.