วัน crontab ของสัปดาห์เทียบกับวันของเดือน?


14

ฉันได้เพิ่มสิ่งนี้ลงใน / etc / crontab บนระบบ linux & freebsd ที่ต่างกัน:

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

ฉันต้องการเริ่มต้นใหม่ในวันที่ 3 ของทุกเดือน อย่างไรก็ตามทุกระบบรีบูตในวันพุธที่ 3 ของเดือนนี้ (วันที่ 19)

ผมทำอะไรผิดหรือเปล่า?

อัปเดต : ด้วยคำตอบของ Ranon ด้านล่างดูเหมือนว่าการแก้ไขด้านล่างจะใช้ได้ทุกคนสามารถยืนยันหรือมีวิธีที่ดีกว่าในการทำมันได้หรือไม่

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

คำตอบ:


16

man 5 crontabมีลักษณะที่

หมายเหตุ: วันของการดำเนินการคำสั่งสามารถระบุได้โดยสองฟิลด์คือวันของเดือนและวันในสัปดาห์ หากทั้งสองเขตข้อมูลถูก จำกัด (เช่นไม่ใช่ *) คำสั่งจะทำงานเมื่อทั้งสองเขตข้อมูลตรงกับเวลาปัจจุบัน ตัวอย่างเช่น `` 30 4 1,15 * 5 '' จะทำให้คำสั่งทำงานตอน 4:30 น. ในวันที่ 1 และ 15 ของแต่ละเดือนรวมถึงทุกวันศุกร์ อย่างไรก็ตามหนึ่งสามารถบรรลุผลตามที่ต้องการโดยการเพิ่มการทดสอบคำสั่ง (ดูตัวอย่างสุดท้ายในตัวอย่างไฟล์ CRON FILE ด้านล่าง)

ดังนั้นเซิร์ฟเวอร์ของคุณควรเริ่มต้นใหม่ทุกวันตั้งแต่ 15-21 และทุกวันอังคาร

ดูตัวอย่าง manpages ':

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

6
นี่เป็นข้อผิดพลาดในการออกแบบอย่างจริงจัง ถ้าฉันต้องการทุกวันตั้งแต่ 15-21 และทุกวันอังคารฉันจะทำรายการ crontab สองรายการ ต้องหันไปใช้การทดสอบแยกเป็นแฮ็คที่น่าเกลียด ที่กล่าวว่าขอขอบคุณสำหรับการให้วิธีแก้ปัญหา!
Laurence Gonsalves
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.