(Tôi không có đủ danh tiếng để bình luận, vì vậy tôi đang thêm vào như một câu trả lời: vui lòng thêm nó dưới dạng nhận xét bên cạnh câu trả lời của anh ấy)
Một lớp lót của Joe Casadonte là hoàn hảo, ngoại trừ nếu bạn chạy cùng set -e
, tức là nếu tập lệnh của bạn bị lỗi và nếu chưa có cronjobs. Trong trường hợp đó, một lớp lót sẽ KHÔNG tạo ra cronjob, nhưng sẽ KHÔNG dừng tập lệnh. Sự thất bại thầm lặng có thể rất sai lệch.
Lý do là crontab -l
trả về với 1
mã trả về, khiến lệnh tiếp theo (the echo
) không được thực thi ... do đó cronjob không được tạo. Nhưng vì chúng được thực thi như một quy trình con (vì dấu ngoặc đơn) nên chúng không dừng tập lệnh.
(Điều thú vị là nếu bạn chạy lệnh tương tự một lần nữa, nó sẽ làm việc: một khi bạn đã thực hiện crontab -
một lần, crontab -l
vẫn kết quả đầu ra không có gì, nhưng nó không trả về một lỗi nữa (bạn không nhận được no crontab for <user>
thông điệp nữa) Vì vậy, sau này. echo
Được thực hiện và crontab được tạo ra)
Trong mọi trường hợp, nếu bạn chạy với set -e
, dòng phải là:
(crontab -l 2>/dev/null || true; echo "*/5 * * * * /path/to/job -with args") | crontab -