กำหนด 2 กำหนดการ:
- Cron ทำงานทุก 8.00 น
0 8 * * * myCronJob.sh
- Fcron ทำงานทุก ๆ 61 นาที:
@1h1 myFcronJob.sh
ในที่สุดพวกเขาจะชนกันและจะไม่ทำงานเนื่องจากในสถานการณ์นี้มีเพียงหนึ่งงานเท่านั้นที่สามารถทำงานได้ในแต่ละครั้ง เพื่อหลีกเลี่ยงปัญหานี้ เราอาจใช้การล็อกเพื่ออนุญาตงานครั้งละหนึ่งงานเท่านั้น เช่น รหัสนี้ที่นี่
0 8 * * * ผู้ใช้/bin/flock /usr/tmp/lfile.lockfile -c 'myCronJob.sh'
@ 1h1 user/bin/flock /usr/tmp/lfile.lockfile -c 'myFcronJob.sh'
สิ่งนี้ทำให้เกิดปัญหาขึ้นอีก ถ้า fcron ได้รับการกำหนดค่าให้ทำงานทุก 61 นาที และเมื่อเริ่มทำงานและจะรอให้งานอื่นเสร็จสิ้น ตัวจับเวลาจะไม่ตรงแนวเพราะในครั้งต่อไปที่รัน
(61 นาที - เวลาที่ล็อคไว้) จำเป็นที่ myFcronJob.sh จะทำงานหลังจาก 60 นาที
ตัวอย่าง
- งาน Cron เริ่มเวลา 8.00 น. และทำงานเป็นเวลา 5 นาที
- Fcron กำลังจะเริ่มในเวลา 08:01 น. เช่นกัน แต่สังเกตเห็นว่าล็อคเข้าที่แล้ว
- Fcron รอให้งาน Cron เสร็จสิ้น
- ในที่สุด Fcron ก็หมดเวลา 08:05 น
- Fcron จะทำงาน 61 นาที ตั้งแต่เวลา 08:01 น. ซึ่งจะส่งผลให้การทำซ้ำครั้งต่อไปเริ่มเวลา 09:02 น. แทนที่จะเป็น 9:06 น. ที่คาดไว้
ฉันกำลังอ่าน man page สำหรับ fcrontab ด้วยความหวังว่าจะมีการตั้งค่าสถานะที่มีประโยชน์ แต่ไม่เข้าใจมากนัก ช่วยชื่นชม