Crontab thay đổi MAILTO chỉ cho một công việc cụ thể trong crontab của Root


8

Tôi có thể thực hiện các thao tác sau để thay đổi nơi gửi thư cho một công việc crontab cụ thể trong crontab của root không (không được gửi đến root cho công việc Do Something, chỉ gửi đến piglover):

# Make a hambone appear
* * * * * /scripts/hambone.pl

# Eat Ham
* * * * * /scripts/manga_ham.py

OLDMAILTO=$MAILTO

MAILTO=porklover.cramble.edu

#Do something
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=$OLDMAILTO

Câu trả lời:


6

Trong triển khai cron truyền thống, bạn không thể làm theo cách này. Các định nghĩa biến trong crontab là toàn cục và cron sử dụng cùng một địa chỉ email cho tất cả các lệnh.

Một cách giải quyết khác là sử dụng địa chỉ cục bộ và chuyển hướng dựa trên đầu vào.

Một phương pháp khác để gửi đầu ra của một công việc đến một địa chỉ khác là thực hiện gửi thủ công. Xem Làm thế nào để đầu ra đường ống từ quá trình này sang quá trình khác nhưng chỉ thực hiện nếu đầu tiên có đầu ra? cho các phương pháp khác nhau.


Một số triển khai cron hiện đại, ít nhất là một trong systemd, phân tích crontab khác nhau (cảm ơn geedoubleya , jarauh ): chỉ các nhiệm vụ trên một dòng công việc áp dụng cho công việc đó. Vì vậy, nếu bạn đang sử dụng hệ thống Linux hiện đại, có cơ hội bạn có thể làm điều đó. Kiểm tra tài liệu trên hệ thống của bạn ( man 5 crontab).

Bạn vẫn không thể làm những gì bạn đề xuất trong câu hỏi của mình, vì cron không mở rộng phía bên phải của các bài tập biến. MAILTO=$OLDMAILTOđặt MAILTOthành một giá trị bắt đầu bằng một ký hiệu đô la. Bạn cần lặp lại địa chỉ cũ.

# Make a hambone appear. Email sent to the user running the crontab.
* * * * * /scripts/hambone.pl

MAILTO=abrahams@example.com
#Do something. Email sent to abrahams@example.com
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=
# Hunt rabbits. Doesn't send email.
* * * * * /scripts/hunt.pl --rabbits

MAILTO=bob
# Eat Ham. Email sent to bob on the local machine.
* * * * * /scripts/manga_ham.py

Cũng lưu ý rằng MAILTO=porklover.cramble.edusẽ gửi thư đến tài khoản porklover.cramble.edutrên máy cục bộ. Đó có lẽ không phải là những gì bạn muốn.


Trong câu trả lời của mình, người dùng @geedoubleya tuyên bố rằng có thể thay đổi địa chỉ email giữa các lệnh. Nó có thể phụ thuộc vào phiên bản cronjob?
jarauh

1
@jarauh Cảm ơn, nó dường như phụ thuộc vào việc thực hiện cron. Cho rằng mọi người đã vá cron theo mọi cách mà không phải luôn thay đổi tín dụng hoặc số phiên bản, tôi không biết phiên bản nào của cron làm theo cách này.
Gilles 'SO- ngừng trở nên xấu xa'

Cảm ơn vì thông tin. Điều tồi tệ hơn là mọi người cũng không quan tâm đến việc ghi lại những thay đổi của họ trong các trang man tương ứng. Cụ thể, định dạng cho crontab không được ghi lại trong tất cả các chi tiết (ví dụ: thứ tự của các dòng có vấn đề).
jarauh

1

Mặc dù không thể thiết lập các biến như thế này trong mục nhập cron, nhưng điều mà crontab sẽ cho phép bạn làm là ghi đè MAILTObiến cho một mục nhập sau đó đặt lại cho các mục tiếp theo.

Thí dụ:

# Eat Ham
* * * * * /scripts/manga_ham.py

MAILTO=porklover.cramble.edu

#Do something
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=root

Như một mặt trái của điều này, nếu MAILTOcài đặt mặc định được thay đổi ( /etc/crontabví dụ), nó cũng cần phải được thay đổi trong mục cron này.

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.