/etc/cron.daily/foo: Gửi email đến một người dùng cụ thể thay vì root?


13

Tôi đang chạy CentOS 5.5.

Chúng tôi có một số cronjobs được lưu trữ trong /etc/cron.daily/. Chúng tôi muốn email cho một số cronjobs này đi đến một địa chỉ email cụ thể, trong khi phần còn lại của email trong /etc/cron.daily/ nên chuyển đến địa chỉ email mặc định (root @ localhost).

Các cronjobs trong /etc/cron.daily/ được chạy từ tệp / etc / crontab. / etc / crontab chỉ định trường 'MAILTO'. Tôi có thể ghi đè lên điều này bằng cách đặt MAILTO trong /etc/cron.daily/foo cronjob của tôi không?

Cách tốt nhất để xử lý việc này là gì?


Lưu ý cho người dùng CentOS 6.5 (cronie): /etc/crontabkhông chỉ định mặc định.
Adam Monsen

Câu trả lời:


13

Thiết MAILTO=user@example.orgtrong /etc/cron.daily/fookhông làm việc. Đầu ra tập lệnh không được gửi đến user@example.org.

Trang tại http://www.unixgeek.org/security/newbie/unix/cron-1.html cũng gợi ý một giải pháp đơn giản:

Các tập tin /etc/cron.daily/foohiện có chứa như sau:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" stefanl@example.org

Điều này sẽ gửi email đến 'stefanl@example.org' với chủ đề tương đương với đường dẫn đầy đủ của tập lệnh (ví dụ /etc/cron.daily/foo).

Đây là những gì Unixgeek.org nói về điều này:

Đầu ra từ cron

Như tôi đã nói trước đây, đầu ra từ cron được gửi đến chủ sở hữu của quy trình hoặc người được chỉ định trong biến MAILTO, nhưng nếu bạn không muốn điều đó thì sao? Nếu bạn muốn gửi đầu ra cho người khác, bạn chỉ có thể chuyển đầu ra sang thư lệnh. ví dụ

cmd | người dùng "chủ đề của thư"

Đôi khi, tôi chỉ muốn nhận lỗi từ một cronjob chứ không phải stdout, vì vậy tôi sử dụng thủ thuật này. Cú pháp có thể nhìn sai từ cái nhìn đầu tiên, nhưng yên tâm rằng nó hoạt động. Các cronjob sau sẽ gửi STDOUT tới / dev / null và sau đó sẽ xử lý STDERR qua đường ống.

doit 2>&1 >/dev/null | mailx -s "$0" stefanl@example.org

Điều tương tự, nhưng gửi đến syslog:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

Đồng thời xem câu trả lời của tôi trên ServerFault to Cronjob stderr để gửi và gửi email


6

Một giải pháp thanh lịch hơn sẽ là sử dụng /etc/cron.dtrực tiếp. Thay vì có tập lệnh của bạn /etc/cron.daily, hãy đặt nó vào một nơi nào đó như /usr/local/sbin/myscript.shsau đó tạo tập tin /etc/cron.d/myscriptdưới dạng:

MAILTO=root,whomever@example.org
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

Điều này cũng giúp bạn kiểm soát nhiều hơn khi công việc xảy ra; ví dụ chỉ vào một số ngày trong tuần, v.v ... Xem crontab(5)người đàn ông để biết thêm thông tin.


0

Giả sử bạn có quyền truy cập SA trên máy này, bạn có thể tạo tài khoản người dùng mới, thêm các tác vụ vào tài khoản này. Thư cho người dùng này sau đó có thể được chuyển tiếp bằng tệp .forward trong thư mục nhà của tài khoản này. Bạn có thể phải thiết lập các hoán vị cho người dùng này nếu các tác vụ cron yêu cầu quyền truy cập riêng tư.

Việc câu trả lời này hay của Stefan phù hợp nhất thực sự phụ thuộc vào mức độ rắc rối mà bạn muốn khi thiết lập và liệu bạn có muốn thông báo lỗi đi đến email gốc hoặc cho những người thường theo dõi đầu ra hàng ngày hay không.

Chúc may mắn

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.