Як я можу запланувати роботу cron, яка працює кожні 10 секунд в Linux?


Відповіді:


10

Ви не можете запланувати роботу кожні десять секунд, але я припускаю, що ви могли запланувати роботу, яку потрібно виконувати щохвилини, і спати в петлі через інтервали 10с. Це передбачається, коли ваша команда буде завершена до закінчення десятисекундного інтервалу, або ви отримаєте перекриття, коли буде запущена наступна команда. Це виглядає як хитке рішення, але якщо ви можете гарантувати дуже коротке виконання головної команди сценарію, воно спрацює.

#!/bin/bash
i=0

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

Я роблю подібну річ ... Я просто використовую * s у crontab, і тоді мій сценарій використовує flock та циклі назавжди, ніколи не виходить, якщо не може отримати замок.
Петро-

22

У мене було подібне завдання минулого тижня. Мої рішення полягали в перемноженні стандартних записів крона на потрібну частоту. Мій 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

до кожного рядка, розташованого вище. Потім stderr та stdout переспрямовуються на файл журналу.


2
+1 для творчого використання
хронів

2
Це найкраще рішення ІМХО. Зрозуміло, що він робить, і не потрібен сценарій чи сторонні рішення.
Джеремі


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

Якщо вам потрібно перейти до другої секунди, додайте мікросекунди до команди дата.


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

Тут сценарій можна запустити з інтервалом 10 секунд ...


Це рішення вже розміщено 5 років тому. Вам слід просто оновити його, а не опублікувати знову.
Джеральд Шнайдер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.