Как запускать скрипты каждые 5 секунд?

У меня есть сценарий, который нужно запускать каждые пять секунд. Я знаю, что cron может выполнять задания с минуты, но есть ли способ запускать что-то каждую секунду?

1
задан 30 December 2016 в 22:25

9 ответов

У вас может быть задание cron запускать скрипт каждую минуту, которая запускает 12 фоновых процессов:

* * * * * ~/dostuff.sh

dostuff.sh:

(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
[ ! d2]

Мой вопрос, однако, заключается в том, что вы можете делать с EARTH каждые 5 секунд?

26
ответ дан 29 May 2018 в 13:00
  • 1
    Ну, это мне пригодилось, когда я сделал скрипт, который неоднократно проверяет каталог /media для диска, который я подключаю к usb для автоматического резервного копирования ... – VF1 22 August 2013 в 07:52
  • 2
    What on EARTH - статистика, сбор мусора, синхронизация файлов, статус онлайн, вы называете это. – ruX 17 July 2016 в 02:53
  • 3
    Ссылка на внешний API для данных почти в реальном времени. Запуск запроса каждые 5 секунд намного лучше, чем при каждом просмотре страницы. – Sergey Kudriavtsev 19 July 2016 в 00:41
  • 4
    Что делать, если crontab дважды выполняет файл dostuff.sh? Например, на 55-й секунде скрипт выполняется, но еще не закончен, но cron снова вызывает сценарий, что произойдет? – TomSawyer 14 September 2016 в 12:16
  • 5
    Запись в файл для балансировки нагрузки для проверки и баланса на основе. – flickerfly 6 April 2017 в 15:48

Просто используйте цикл:

while true ; do ./your-script & sleep 5; done

Это запустит ваш скрипт в качестве фонового задания, спящий на 5 секунд, затем снова запустится. Вы можете использовать Ctrl-C, чтобы прервать его, или использовать любое другое условие вместо true, например. ! test -f /tmp/stop-my-script только для цикла, пока файл /tmp/stop-my-script не существует.

26
ответ дан 29 May 2018 в 13:00
  • 1
    Если я включаю амперсанд, он говорит bash: syntax error near unexpected token ';', поэтому я его вынул. У меня есть bash 4.3.11. Моя команда работает быстро, так что это нормально, если она работает на переднем плане. – Tyler Collier 4 December 2016 в 08:48
  • 2
    @TylerCollier Если вам понадобилось ./your-script для запуска в фоновом режиме (во время 5-секундного сна), вы можете сохранить &, но сбросить ;. Поскольку & служит для разделения команд, нет необходимости (и, по-видимому, не разрешено) иметь ; после него в той же строке. Другим способом является запись цикла в несколько строк (с разрывом строки после & и, необязательно, разрывов строк после do и до done). Поскольку ; после & кажется опечаткой, я удалил его. blueyed: Пожалуйста, не стесняйтесь вернуть ;, если вы действительно этого хотите; если это так, я предлагаю также добавить объяснение. – Eliah Kagan 31 December 2016 в 00:40
  • 3
    @EliahKagan FWIW, он работает на Zsh (без синтаксической ошибки), но это действительно не нужно. Спасибо за редактирование! – blueyed 12 January 2017 в 15:43

Вы можете использовать GNU-пакет mcron, альтернативу «Vixie cron».

http://www.gnu.org/software/mcron/manual/mcron.html#Top

«Может быть легко разрешено задавать более тонкие временные точки, то есть секунды. В принципе это может быть увеличено до микросекунд, но это не реализовано».

6
ответ дан 29 May 2018 в 13:00

Минимальная конфигурация в cron - минуты, вы не можете установить ее в течение 5 секунд. Вы можете использовать кварц, который позволяет секунд. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html

2
ответ дан 29 May 2018 в 13:00
  • 1
    Кажется, что кварц не является открытым исходным кодом. Это верно? – txwikinger 5 August 2010 в 00:24
  • 2
    Он имеет версию с открытым исходным кодом. У него нет страницы, а просто перейдите на страницу загрузки. Вам не нужно заполнять форму, просто нажмите на меня, чтобы загрузить. – Cody Harlow 5 August 2010 в 00:27
  • 3
    похоже, с открытым исходным кодом не менее 2018. github.com/quartz-scheduler/quartz – dogmatic69 18 February 2018 в 20:39

Используйте cacti для мониторинга маршрутизатора и коммутатора, но Cron разрешает использовать как минимум одну минуту, поэтому, если один порт / устройство выключен, предупреждение не появится до двух минут.

2
ответ дан 29 May 2018 в 13:00

Я делал это очень успешно (и конечный результат запускает недели за раз, пока машина не перезагружена). Что касается того, что я делал прямо сейчас, обновляя информацию и помещая ее в кеш - обновляя каждые 10 секунд.

#!/bin/sh

SLEEP=5

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# echo and restart...
exec $0

«exec $ 0» перезапускает скрипт, но заменяет исполняемый скрипт. Его можно начать с линии crontab @reboot.

1
ответ дан 29 May 2018 в 13:00
  • 1
    Почему бы не использовать цикл while вместо повторного перезапуска скрипта? – David Z 5 August 2010 в 00:56

У вас может быть задание cron запускать скрипт каждую минуту, которая запускает 12 фоновых процессов:

* * * * * ~/dostuff.sh

dostuff.sh:

(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
[ ! d2]

Мой вопрос, однако, заключается в том, что вы можете делать с EARTH каждые 5 секунд?

26
ответ дан 29 May 2018 в 13:00

У вас может быть задание cron запускать скрипт каждую минуту, которая запускает 12 фоновых процессов:

* * * * * ~/dostuff.sh

dostuff.sh:

(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
[ ! d2]

Мой вопрос, однако, заключается в том, что вы можете делать с EARTH каждые 5 секунд?

26
ответ дан 29 May 2018 в 13:00

У вас может быть задание cron запускать скрипт каждую минуту, которая запускает 12 фоновых процессов:

* * * * * ~/dostuff.sh

dostuff.sh:

(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
[ ! d2]

Мой вопрос, однако, заключается в том, что вы можете делать с EARTH каждые 5 секунд?

26
ответ дан 29 May 2018 в 13:00

Другие вопросы по тегам:

Похожие вопросы: