Cronjob chạy trước thời gian dự kiến, điều gì có thể sai?


10

Tôi có dưới crontab dự kiến ​​vào thứ Bảy rơi vào giữa ngày 19-23, tôi không chắc tại sao nó lại chạy vào ngày 20 (Thứ Sáu). Đoán nào?

00 21 19-23 * 6 <command>

1
Bạn có thể tìm thấy một số nguồn cảm hứng /etc/cron.d/mdadmđược sử dụng trên Ubuntu và Debian. Đây là cách nó chạy vào Chủ nhật đầu tiên của mỗi tháng:57 0 * * 0 root if [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ]; then /usr/share/mdadm/checkarray --cron --all --idle --quiet; fi
kasperd

cảm ơn kasperd, 0 18 * * 6 [date +\%d -le 07] && <task> đang làm việc tốt cho tôi, nơi bắt buộc phải chạy vào thứ bảy đầu tiên hàng tháng.
simer

Câu trả lời:


16

Biểu thức Cron đó dịch thành:

At 21:00 on the 19, 20, 21, 22 and 23rd of every month and every Saturday.

Vì vậy, nó nói rõ ràng với cron để chạy vào thứ Sáu ngày 20. Điều này bởi vì:

When the schedule specifies both date and weekday, they're combined with a logical OR,
i.e. the job will run if current_minute == scheduled_minute 
&& current_hour == scheduled_hour && current_month == scheduled_month && 
(current_day == scheduled_date OR current_weekday == scheduled_weekday).

Thông tin này là từ công cụ Cron tiện dụng này: http://crontab.guru/

Để thực hiện công việc của bạn để chạy vào những ngày nhất định khi đó là thứ bảy, bạn có thể sử dụng:

00 21 19-23 * * test $(date +%u) -eq 6 && command

Giải pháp này là từ crontab ngày trong tuần so với ngày trong tháng?


6
Coi chừng %có ý nghĩa đặc biệt trong cronjobs - nó phân tách stdin của lệnh.
dùng1686
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.