Відповіді:
Ви не можете запланувати роботу кожні десять секунд, але я припускаю, що ви могли запланувати роботу, яку потрібно виконувати щохвилини, і спати в петлі через інтервали 10с. Це передбачається, коли ваша команда буде завершена до закінчення десятисекундного інтервалу, або ви отримаєте перекриття, коли буде запущена наступна команда. Це виглядає як хитке рішення, але якщо ви можете гарантувати дуже коротке виконання головної команди сценарію, воно спрацює.
#!/bin/bash
i=0
while [ $i -lt 6 ]; do
/run/your/command &
sleep 10
i=$(( i + 1 ))
done
У мене було подібне завдання минулого тижня. Мої рішення полягали в перемноженні стандартних записів крона на потрібну частоту. Мій 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 переспрямовуються на файл журналу.
Я б використав Monit і встановив час циклу на 10 секунд. Це чистий спосіб управління цим поза системою кронів.
Я роблю це за допомогою певних сценаріїв, які потрібно запускати з інтервалом 15 секунд.
Див.: Як виконувати додаткові / постійні резервні копії zfs пулу?
Якщо ви хочете пройти пізніше 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
Якщо вам потрібно перейти до другої секунди, додайте мікросекунди до команди дата.
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run
Тут сценарій можна запустити з інтервалом 10 секунд ...