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

55

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

    
задан myusuf3 04.08.2010 в 21:03
источник

7 ответов

60

Cron допускает, как минимум, одну минуту. То, что вы могли сделать, это написать сценарий оболочки с бесконечным циклом, который запускает вашу задачу, а затем спит в течение 5 секунд. Таким образом, ваша задача будет выполняться более или менее каждые 5 секунд, в зависимости от того, сколько времени занимает сама задача.

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done

Вы можете создать файл my-task.sh с указанным выше содержимым и запустить его с sh my-task.sh . При желании вы можете настроить его с помощью supervisor в качестве службы, чтобы он запускался при загрузке системы и т. Д.

На самом деле звучит так, будто вы делаете что-то, что вам, вероятно, не следует делать. Это кажется неправильным .

    
ответ дан Tommy Brunn 04.08.2010 в 21:07
источник
28

У вас может быть задание 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) &

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

    
ответ дан warren 04.08.2010 в 21:24
27

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

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

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

    
ответ дан blueyed 04.08.2010 в 22:51
8

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

Ссылка

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

    
ответ дан David 13.05.2014 в 17:24
2

Минимальная конфигурация в cron - минуты, вы не можете установить ее в течение 5 секунд. Вы можете использовать кварц, который позволяет секунд. Ссылка

    
ответ дан Cody Harlow 04.08.2010 в 21:07
2

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

    
ответ дан qttty 26.11.2012 в 03:25
1

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

    
ответ дан Alister Bulman 04.08.2010 в 21:28