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

14

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

Alex
источник

Ответы:

10

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

#!/bin/bash
i=0

while [ $i -lt 6 ]; do
  /run/your/command &
  sleep 10
  i=$(( i + 1 ))
done
Майкл
источник
Я делаю похожую вещь ... Я просто использую * в crontab, а затем мой сценарий использует flock и loop навсегда, никогда не завершает работу, если не может получить блокировку.
Питер
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
Это лучшее решение ИМХО. Понятно что он делает и не требует скрипта или стороннего решения.
Джереми
1

Я бы использовал Monit и установил бы время цикла на 10 секунд. Это чистый способ управлять этим вне системы cron.

Я делаю это с определенными сценариями, которые должны выполняться с интервалом в 15 секунд.

Смотрите: Как выполнять инкрементное / непрерывное резервное копирование пула zfs?

ewwhite
источник
0

Крон позволяет только минимум одну минуту. Вы можете попробовать это -

* * * * * ( sleep 10 ; /usr/bin/wget http://api.us/application/)
Thoman
источник
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 лет назад. Вы должны просто подтвердить это, вместо того, чтобы публиковать его снова.
Джеральд Шнайдер