ปัญหาไม่ได้อยู่ที่ cron แต่เป็นงานของคุณ
คุณจะต้องให้งานโต้ตอบกับล็อคคำอธิบายบางอย่าง วิธีที่ง่ายที่สุดในการทำเช่นนี้คือมันพยายามสร้างไดเรกทอรีและหากประสบความสำเร็จดำเนินการต่อหากไม่ออก เมื่องานของคุณเสร็จสิ้นและออกแล้วควรลบไดเรกทอรีที่พร้อมสำหรับการทำงานครั้งต่อไป นี่คือสคริปต์ที่จะอธิบาย
#!/bin/bash
function cleanup {
echo "Cleanup"
rmdir /tmp/myjob.lck
}
mkdir /tmp/myjob.lck || exit 1
trap cleanup EXIT
echo 'Job Running'
sleep 60
exit 0
รันสิ่งนี้ในเทอร์มินัลหนึ่งจากนั้นก่อน 60 วินาทีขึ้นไปรันในเทอร์มินัลอื่นมันจะออกจากสถานะ 1 เมื่อกระบวนการแรกออกจากคุณสามารถเรียกใช้จากเทอร์มินัลที่สอง ...
แก้ไข:
เมื่อฉันเพิ่งเรียนรู้เกี่ยวกับฝูงฉันคิดว่าฉันจะอัปเดตคำตอบนี้
ฝูง (1)อาจใช้งานง่ายกว่า ในกรณีนี้flock -n
จะดูเหมาะสมเช่น
* * * * * /usr/bin/flock -n /tmp/myAppLock.lck /path/to/your/job
จะทำงานของคุณทุกนาที แต่จะล้มเหลวหากฝูงไม่สามารถล็อคไฟล์ได้