ฉันจะกำหนดเวลางาน cron ที่รันทุกๆ 10 วินาทีใน linux ได้อย่างไร


คำตอบ:


10

คุณไม่สามารถกำหนดเวลางานได้ทุก ๆ สิบวินาที แต่ฉันคิดว่าคุณสามารถกำหนดเวลาให้งานรันทุกนาทีและพักในการวนซ้ำในช่วงเวลา 10 วินาที สิ่งนี้จะถูกบอกล่วงหน้าเมื่อคำสั่งของคุณเสร็จสมบูรณ์ก่อนช่วงเวลาสิบสองวินาทีจะหมดอายุหรือคุณจะได้รับการทับซ้อนเมื่อคำสั่งถัดไปทำงาน สิ่งนี้ให้ความรู้สึกเหมือนเป็นวิธีที่ล่อแหลม แต่ถ้าคุณรับประกันการเรียกใช้คำสั่งหลักของสคริปต์ได้อย่างรวดเร็ว

#!/bin/bash
i=0

while [ $i -lt 6 ]; do
  /run/your/command &
  sleep 10
  i=$(( i + 1 ))
done

ฉันทำสิ่งที่คล้ายกัน ... ฉันเพียงแค่ใช้ * ใน crontab แล้วสคริปต์ของฉันจะใช้ฝูงแกะและวนซ้ำไปตลอดกาลไม่เคยหยุดจนกว่าจะไม่ได้ล็อค
Peter

22

ฉันมีงานที่คล้ายกันเมื่อสัปดาห์ที่แล้ว โซลูชันของฉันคือการคูณรายการ 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 จะถูกเปลี่ยนเส้นทางไปยังไฟล์บันทึก


2
+1 สำหรับการใช้งาน cron สร้างสรรค์
shodanshok

2
นี่คือทางออกที่ดีที่สุด IMHO ชัดเจนว่ากำลังทำอะไรอยู่และไม่ต้องการสคริปต์หรือโซลูชันของบุคคลที่สาม
Jeremy

1

ฉันจะใช้Monitและตั้งค่ารอบเวลาเป็น 10 วินาที นี่เป็นวิธีที่สะอาดในการจัดการนอกระบบ cron

ฉันทำสิ่งนี้กับสคริปต์บางตัวที่ต้องทำงานในช่วงเวลา 15 วินาที

โปรดดู: วิธีการสำรองข้อมูลส่วนเพิ่ม / ต่อเนื่องของพูล zfs อย่างไร


0

Cron อนุญาตอย่างน้อยหนึ่งนาที คุณสามารถลองสิ่งนี้ -

* * * * * ( sleep 10 ; /usr/bin/wget http://api.us/application/)

0

หากคุณต้องการไปย่อย 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


0
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run

สคริปต์ที่นี่สามารถทำงานได้ด้วยการผสมผสานภายใน 10 วินาที


โซลูชันนี้มีการโพสต์เมื่อ 5 ปีที่แล้ว คุณควร upvote แทนการโพสต์อีกครั้ง
Gerald Schneider
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.