Назад | Перейти на главную страницу

Как я могу запланировать задание cron, которое запускается каждые 10 секунд в Linux?

Я знаю, как делать каждую минуту, но как насчет каждые 10 секунд?

На прошлой неделе у меня была аналогичная задача. Моим решением было умножить стандартные записи 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 перенаправляются в файл журнала.

Вы не можете запланировать задание каждые десять секунд, но я полагаю, вы можете запланировать выполнение задания каждую минуту и ​​засыпать в цикле с 10-секундными интервалами. Это будет зависеть от того, что ваша команда будет завершена до истечения десятисекундного интервала, или вы получите перекрытие при выполнении следующей команды. Это кажется сомнительным решением, но если вы можете гарантировать очень короткое выполнение основной команды сценария, оно сработает.

#!/bin/bash
i=0

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

Я бы использовал Монит и установите время цикла на 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

Если вам нужно сделать меньше секунды, добавьте микросекунды в команду даты.

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

Здесь скрипт можно запускать с интервалом 10 секунд ...