ฉันรู้ว่าต้องทำทุกนาที แต่จะทำอย่างไรทุก ๆ 10 วินาที?
ฉันรู้ว่าต้องทำทุกนาที แต่จะทำอย่างไรทุก ๆ 10 วินาที?
คำตอบ:
คุณไม่สามารถกำหนดเวลางานได้ทุก ๆ สิบวินาที แต่ฉันคิดว่าคุณสามารถกำหนดเวลาให้งานรันทุกนาทีและพักในการวนซ้ำในช่วงเวลา 10 วินาที สิ่งนี้จะถูกบอกล่วงหน้าเมื่อคำสั่งของคุณเสร็จสมบูรณ์ก่อนช่วงเวลาสิบสองวินาทีจะหมดอายุหรือคุณจะได้รับการทับซ้อนเมื่อคำสั่งถัดไปทำงาน สิ่งนี้ให้ความรู้สึกเหมือนเป็นวิธีที่ล่อแหลม แต่ถ้าคุณรับประกันการเรียกใช้คำสั่งหลักของสคริปต์ได้อย่างรวดเร็ว
#!/bin/bash
i=0
while [ $i -lt 6 ]; do
/run/your/command &
sleep 10
i=$(( i + 1 ))
done
ฉันมีงานที่คล้ายกันเมื่อสัปดาห์ที่แล้ว โซลูชันของฉันคือการคูณรายการ cron มาตรฐานกับความถี่ที่ต้องการ crontab ของฉันดูเหมือนว่า:
* * * * * /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 10; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 20; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 30; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 40; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 50; /usr/local/bin/php /var/www/myscript.php
หากคุณต้องการตรวจสอบผลลัพธ์ของ myscript.php เช่นสำหรับการดีบักเพียงแค่ต่อท้าย
&> /tmp/myscipt.log
ถึงแต่ละบรรทัดใน crontab ด้านบน จากนั้น stderr และ stdout จะถูกเปลี่ยนเส้นทางไปยังไฟล์บันทึก
ฉันจะใช้Monitและตั้งค่ารอบเวลาเป็น 10 วินาที นี่เป็นวิธีที่สะอาดในการจัดการนอกระบบ cron
ฉันทำสิ่งนี้กับสคริปต์บางตัวที่ต้องทำงานในช่วงเวลา 15 วินาที
โปรดดู: วิธีการสำรองข้อมูลส่วนเพิ่ม / ต่อเนื่องของพูล zfs อย่างไร
Cron อนุญาตอย่างน้อยหนึ่งนาที คุณสามารถลองสิ่งนี้ -
* * * * * ( sleep 10 ; /usr/bin/wget http://api.us/application/)
หากคุณต้องการไปย่อย 10 วินาทีเช่น 5 วินาทีฉันขอแนะนำให้วนลูปคนงานด้วยสคริปต์เล็กน้อยดังนี้
#!/bin/bash
INTERVAL=5
while true; do
echo "do something"
# wait for next interval
WAIT_UNTIL=$(($(date +%s) + $INTERVAL))
while [ $(date +%s) -lt $WAIT_UNTIL ]; do
sleep 1
done
done
ถ้าคุณต้องการย่อยวินาทีให้เพิ่ม microseconds ลงในคำสั่ง date
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run
สคริปต์ที่นี่สามารถทำงานได้ด้วยการผสมผสานภายใน 10 วินาที