คุณช่วยแนะนำฉันว่าควรเขียนcrontab
อะไรเพื่อทำงานบางอย่าง (สำหรับการทดสอบที่ฉันจะใช้/usr/bin/chromium-browser
) ทุก ๆ 15 วินาที?
คุณช่วยแนะนำฉันว่าควรเขียนcrontab
อะไรเพื่อทำงานบางอย่าง (สำหรับการทดสอบที่ฉันจะใช้/usr/bin/chromium-browser
) ทุก ๆ 15 วินาที?
คำตอบ:
คุณไม่สามารถลงไปด้านล่างได้หนึ่งนาทีด้วย cron สิ่งที่คุณสามารถทำได้คือเรียกใช้สคริปต์ที่รันงานของคุณทุกนาทีรอ 15 วินาทีและทำซ้ำ บรรทัด crontab ต่อไปนี้จะเริ่มsome_job
ทุก ๆ 15 วินาที
* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job
สคริปต์นี้อนุมานว่างานจะไม่ใช้เวลาเกิน 15 วินาที สคริปต์ที่ซับซ้อนมากขึ้นเล็กน้อยต่อไปนี้จะไม่เรียกใช้อินสแตนซ์ถัดไปหากใช้เวลานานเกินไป มันอาศัยdate
การสนับสนุน%s
รูปแบบ (เช่น GNU หรือ Busybox ดังนั้นคุณจะโอเคกับ Linux) หากคุณวางไว้ใน crontab โดยตรงโปรดทราบว่า%
ตัวอักษรจะต้องเขียนเหมือน\%
ในบรรทัด crontab
end=$(($(date +%s) + 45))
while true; do
some_job &
[ $(date +%s) -ge $end ] && break
sleep 15
wait
done
[ $(date +%s) -ge $(($end + 15)) ] || some_job
อย่างไรก็ตามฉันจะทราบว่าถ้าคุณต้องการทำงานบ่อยเท่าทุก ๆ 15 วินาที cron น่าจะเป็นวิธีที่ผิด แม้ว่ายูนิเซฟจะทำงานได้ดีในช่วงเวลาสั้น ๆ แต่ค่าใช้จ่ายในการเรียกใช้โปรแกรมทุก ๆ 15 วินาทีอาจไม่สามารถเพิกเฉยได้ (ขึ้นอยู่กับความต้องการของโปรแกรม) คุณไม่สามารถรันแอปพลิเคชันของคุณตลอดเวลาและให้มันทำงานทุก ๆ 15 วินาทีได้หรือไม่?
1 2 3 4 ; do some_job & sleep 15; done
(การนอนหลับครั้งสุดท้ายจะไม่ส่งผลกระทบต่อการวิ่งครั้งต่อไป) แต่วิธีที่คุณทำได้ดีกว่าสำหรับระยะเวลาของจดหมาย cronjob ขาออก (ส่งหลังจาก some_job ที่ผ่านมาครั้งล่าสุด ตัวแปรของฉัน)
วิธีการที่แตกต่างจากคนอื่น ๆ : เรียกใช้ 4 cronjobs แต่ละคนเดินโซเซ 15 วินาที:
* * * * * sleep 00; timeout 15s some_job
* * * * * sleep 15; timeout 15s some_job
* * * * * sleep 30; timeout 15s some_job
* * * * * sleep 45; timeout 15s some_job
เพื่อป้องกันไม่ให้งานเข้าไปยุ่งกับตัวเองเราจึง จำกัด เวลาทำงานเป็น 15 วินาทีผ่านทาง GNU coreutils ' timeout
สำหรับแต่ละงาน อย่างไรก็ตามโปรดทราบว่าหากงานล้มเหลวในการออกอย่างถูกต้องทันทีในตอนท้ายของยุค 15 คุณอาจยังคงมีปัญหา ดูคู่มือคำสั่งสำหรับรายละเอียดเกี่ยวกับวิธีการแก้ไขหากเป็นปัญหา นอกจากนี้โปรดทราบว่าหากคำสั่งใช้เวลานานกว่า 15 วินาทีและการหมดเวลาใช้งานจะทำให้คุณได้รับสถานะการออกที่ไม่เป็นศูนย์ซึ่งจะเรียกอีเมล cronjob
ในระยะสั้น cron ไม่ใช่เม็ดที่มีเวลา ระยะเวลาที่สั้นที่สุดที่คุณจะได้รับคือ 1 นาที
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .----- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
* * * * /usr/bin/chromium-browser
อย่างไรก็ตามคุณสามารถเขียนสคริปต์ที่จะทำงานทุก ๆ 15 วินาที ...
* * * * * /usr/bin/chromium-browser
ใน crontab ตามคู่มือควรรันทุกนาที แต่ไม่มีอะไรทำงาน
ใน crontab ของคุณ:
* * * * /usr/bin/chromium-browser_starter
จากนั้นใน/usr/bin/chromium-browser_starter
:
#!/bin/sh
# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).
for ((secs=0; secs<46; secs+=15)); do
(sleep $secs; /usr/bin/chromium-browser "$@") &
done
wait
ps aux | grep chrom
หลังจากผ่านไปครู่หนึ่งฉันไม่เห็น Chromium-browser ทำงาน
sleep
สำหรับ