รันงาน Cron ทุก ๆ N นาทีพร้อมออฟเซ็ต


251

*/20 * * * *

รับรองว่ามันทำงานทุก ๆ 20 นาทีฉันต้องการทำงานทุก ๆ 20 นาทีเริ่มตั้งแต่ 5 โมงเช้าแล้วเป็นไปได้ไหมกับ Cron? มันจะเป็น:

5/20 * * * * ?


10
ขอขอบคุณชาวบาบิโลนที่ตัดสินใจว่าระบบเวลาของเราควรจะถูกหารด้วย 1,2,3,4,5 และ 6 อย่างแน่นอน
arivero

3
ถ้ามันหารด้วย 2 และ 3 ก็หารด้วย 6
Ziofil

คำตอบ:


514

หากต้องการเริ่มงานทุก ๆ 20 นาทีเริ่มตั้งแต่ 5 โมงเช้าให้ลองทำดังนี้

 5-59/20 * * * *

คำอธิบาย

*ในสนามนาทีเป็นเช่นเดียวกับ0-59/1ที่0-59เป็นช่วงและ1เป็นขั้นตอน คำสั่งจะทำงานในนาทีแรกในช่วง (0) จากนั้นนาทีต่อเนื่องทั้งหมดที่อยู่ห่างจากขั้นตอนแรกโดยขั้นตอนที่ (1) จนถึงนาทีสุดท้าย (59)

ซึ่งเป็นสาเหตุที่*/20 * * * *จะทำงานที่ 0 นาทีหลังจากนั้น 20 นาทีและหลังจาก 40 นาทีซึ่งเท่ากับทุก ๆ 20 นาที อย่างไรก็ตาม*/25 * * * *จะทำงานที่ 0 นาที 25 นาทีหลังจากและ 50 นาทีหลังจาก - ซึ่งไม่เหมือนกับทุก 25 นาที นั่นเป็นเหตุผลว่าทำไมจึงเป็นที่พึงปรารถนาที่จะใช้ค่าขั้นตอนในฟิลด์นาทีที่แบ่งเป็น 60 เท่า ๆ กัน

ดังนั้นเพื่อชดเชยเวลาเริ่มต้นให้ระบุช่วงอย่างชัดเจนและตั้งค่าแรกเป็นจำนวนของออฟเซ็ต

ตัวอย่าง

5-59/20 * * * * จะทำงานที่ 5 นาทีหลังจาก 25 นาทีหลังจากและ 45 นาทีหลังจากนั้น

10-59/25 * * * * จะทำงานที่ 10 นาทีหลังจากนั้นและ 35 นาทีหลังจากนั้น

1-59/2 * * * * จะทำงานทุก ๆ คี่


3
ที่ทำงานได้อย่างสมบูรณ์แบบ คุณค้นพบได้อย่างไร? คุณสามารถชี้ให้ฉันดูเอกสารได้หรือไม่? ขอบคุณ
AJP

12
การค้นหาของ Google ที่หลากหลายนำฉันไปสู่คำตอบข้อผิดพลาดเซิร์ฟเวอร์นี้ มันมีความผิดพลาดซึ่งทำให้ผมสับสนจริงๆโดยเฉพาะอย่างยิ่งตั้งแต่ผลลัพธ์อื่น ๆ บอกว่าขั้นตอนนาทีโมดูลัสควรจะเท่ากับศูนย์ ในที่สุดฉันก็พบหน้าคู่มือนี้ซึ่งให้คำตอบกับฉัน เป็นผลให้ฉันสามารถแสดงความคิดเห็นในคำตอบ Server Fault ซึ่งได้รับการแก้ไขแล้ว ฉันจำคำค้นหาจริงที่ใช้เพื่อค้นหาหน้า IBM ไม่ได้
toxalot

3
ขอขอบคุณและการทำงานที่ยอดเยี่ยม @toxalot ฉันหวังว่าเราจะได้รับรางวัล "Tireless Investigator" ให้กับคุณ! : P
AJP

5
ฮ่า ๆ. ฉันต้องการทำงานทุก ๆ 10 นาที (ชดเชยด้วย 5) และไม่ต้องการใช้รายการที่คั่นด้วยจุลภาคดังนั้นฉันจึงตัดสินใจหาคำตอบ
toxalot

2
CPanel ดูเหมือนจะไม่ชอบสิ่งนี้โชคไม่ดี :(
Robert Went

53

แน่นอน!

5,25,45 * * * * /your/cron

2
ขอบคุณ ฉันลงเอยด้วยการทำสิ่งนี้หวังว่ามันจะมีทางออกที่ดีกว่า
AJP

13
บางครั้งคำตอบที่ง่ายนั้นดีกว่าเพราะง่ายต่อการอ่านและทำความเข้าใจ ฉันชอบที่5-59/20จะรู้ว่าเป็นไปได้ แต่5,25,45มีข้อได้เปรียบที่ชัดเจนในทันทีว่ามันทำอะไร
thomasrutter

2
เฉพาะในกรณีที่ขั้นตอนของคุณมีขนาดใหญ่พอ
Tebe

3
นี่เป็นตัวอย่างที่ดีกว่ามาก ใช้เวลาโหลดความรู้ความเข้าใจ 0 ครั้งเพื่อทำความเข้าใจเมื่องานเริ่มต้น
Dylan Pierce

11

คุณสามารถลอง: */5 * * * * sleep N; your job


4
ฉันเห็นว่าไม่มีอะไรผิดปกติ - ในความเป็นจริงนี้คล้ายกับวิธีการทำงาน cron ของ certbot ทำให้เกิดการชดเชยแบบสุ่มซึ่งช่วยให้เซิร์ฟเวอร์มีความสมดุล แน่นอนว่าไม่สมควรได้รับ downvotes เหล่านั้นทั้งหมด
billynoah

6
นี่ทำให้ฉันสงสัยว่าจะนอนกี่วินาทีแบบสุ่ม sleep `shuf -i 1-100 -n 1`ไม่หลอกลวง
Laizer

dammit @Laizer คุณทำให้ฉันเรียนรู้อะไรอีกแล้ว! (ขอบคุณ!)
UncaAlby
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.