crontab ngày trong tuần so với ngày trong tháng?


14

Tôi đã thêm cái này vào / etc / crontab trên một vài hệ thống linux & freebsd khác nhau:

# monthly reboot: 3rd Tuesday of every month
56 07 15-21 * 2 root /sbin/shutdown -r now

Tôi muốn khởi động lại vào TUESDAY thứ 3 mỗi tháng. Tuy nhiên, tất cả các hệ thống đã khởi động lại vào thứ Tư thứ 3 của tháng này (ngày 19).

Tôi đang làm gì sai?

Cập nhật : Nhờ câu trả lời của Ranon bên dưới, có vẻ như bản sửa đổi dưới đây sẽ hoạt động, bất cứ ai cũng có thể xác nhận hoặc có cách nào tốt hơn để làm điều đó không?

# monthly reboot: 3rd Tuesday of every month
56 07 15-21 * * root test $(date +\%u) -eq 2 && /sbin/shutdown -r now

Câu trả lời:


16

Có một cái nhìn vào man 5 crontab.

Lưu ý: Ngày thực hiện lệnh có thể được chỉ định bởi hai trường - ngày trong tháng và ngày trong tuần. Nếu cả hai trường bị hạn chế (nghĩa là không *), lệnh sẽ được chạy khi một trong hai trường khớp với thời gian hiện tại. Ví dụ, `` 30 4 1,15 * 5 '' sẽ khiến một lệnh được chạy vào lúc 4:30 sáng vào ngày 1 và 15 mỗi tháng, cộng với mỗi thứ Sáu. Tuy nhiên, người ta có thể đạt được kết quả mong muốn bằng cách thêm một bài kiểm tra vào lệnh (xem ví dụ cuối cùng trong EXAMPLE CRON FILE bên dưới).

Vì vậy, máy chủ của bạn nên khởi động lại mỗi ngày từ 15-21 VÀ mỗi thứ ba.

Hãy xem ví dụ của các trang:

# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +%u) -eq 6 && echo "2nd Saturday"

6
Điều này nghiêm trọng có vẻ như một lỗi thiết kế. Nếu tôi muốn mỗi ngày từ 15-21 VÀ mỗi thứ ba, tôi sẽ thực hiện hai mục crontab riêng biệt. Phải dùng đến một thử nghiệm riêng biệt là một hack xấu xí. Điều đó nói rằng, cảm ơn vì đã cung cấp một cách giải quyết!
Laurence Gonsalves
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.