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 MAILTO
thà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.edu
sẽ gửi thư đến tài khoản porklover.cramble.edu
trên máy cục bộ. Đó có lẽ không phải là những gì bạn muốn.