นอกเหนือจากคำตอบอื่น ๆ โดยเฉพาะลิงก์ที่โพสต์โดย @soulcake: หากคุณกำหนดเวลาคำสั่งที่ใช้เวลานานด้วยช่วงเวลาที่สั้นเกินไป cron จะรันวินาทีอย่างมีความสุขก่อนที่คำสั่งแรกจะเสร็จสมบูรณ์ .
ซึ่งมักจะทำให้คำสั่งดั้งเดิมช้าลงยิ่งขึ้นนำไปสู่อินสแตนซ์อื่นที่ถูกเรียกใช้ก่อนที่คำสั่งก่อนหน้าจะเสร็จสมบูรณ์ ฯลฯ หรืออาจไม่เป็นที่ต้องการด้วยเหตุผลอื่น
วิธีทั่วไปในการป้องกันคือการเรียกใช้คำสั่งด้วยการป้องกันที่ทำให้มั่นใจว่าคำสั่งก่อนหน้านี้ไม่ได้ทำงานอยู่ ตัวอย่างเช่น:
10 * * * * pgrep my_slow_command >/dev/null || /usr/local/bin/my_slow_command
ตรวจสอบให้แน่ใจว่า pgrep ตรงกับชื่อของคำสั่งเมื่อรันเช่นสคริปต์ python มี python เป็นชื่อของไฟล์เรียกทำงานซึ่งอาจไม่เจาะจงมากพอและคุณต้องจับคู่กับชื่อสคริปต์ของ python เช่นกัน
10 * * * * pgrep -f my_script.py || /usr/local/bin/my_script.py
(pgrep ไม่มีตัวเลือก '-f' ตรงกับชื่อสคริปต์ทุบตี)
หากคุณไม่สามารถใช้ pgrep ได้ด้วยเหตุผลบางประการ:
10 * * * * ps ax | grep [m]y_command || /usr/local/bin/my_command
วงเล็บถูกใช้เพื่อหลีกเลี่ยงการจับคู่คำสั่ง grep เอง