Cronjob ทำงานก่อนเวลาที่กำหนดอาจมีอะไรผิดปกติ?


10

ฉันมี crontab ด้านล่างที่กำหนดไว้สำหรับวันเสาร์ที่อยู่ระหว่างวันที่ 19-23 ฉันไม่แน่ใจว่าทำไมมันถึงทำงานในวันที่ 20 (วันศุกร์) มีเดาอะไรไหม

00 21 19-23 * 6 <command>

1
คุณอาจพบแรงบันดาลใจในการ/etc/cron.d/mdadmใช้งานบน Ubuntu และ Debian นี่คือวิธีที่มันทำงานวันอาทิตย์แรกของแต่ละเดือน: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

ขอบคุณ kasperd 0 18 * * 6 [date +\%d -le 07] && <task> ทำงานได้ดีสำหรับฉันที่จะต้องทำงานในวันเสาร์แรกของทุกเดือน
simer

คำตอบ:


16

การแสดงออกของ Cron นั้นแปลว่า:

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

ดังนั้นจึงบอก cron ให้ทำงานอย่างชัดเจนในวันศุกร์ที่ 20 นี่เป็นเพราะ:

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).

ข้อมูลนี้มาจากเครื่องมือ Cron ที่มีประโยชน์นี้: http://crontab.guru/

ในการทำให้งานของคุณทำงานในวันที่กำหนดเมื่อเป็นวันเสาร์คุณสามารถใช้:

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

วิธีแก้ปัญหานี้มาจากวัน crontab ของสัปดาห์เทียบกับวันของเดือน?


6
ระวังว่า%มีความหมายพิเศษใน cronjobs - มันแยก stdin ของคำสั่ง
user1686
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.