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

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

80
задан 30 December 2016 в 21:25

8 ответов

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

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done

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

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

70
ответ дан 30 December 2016 в 21:25

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

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

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

29
ответ дан 30 December 2016 в 21:25

Вы могли бы иметь задание 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 секунд?

43
ответ дан 30 December 2016 в 21:25

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

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

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

11
ответ дан 30 December 2016 в 21:25

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

2
ответ дан 30 December 2016 в 21:25

Вы можете использовать таймер SystemD, который будет запускать службу, которую вы настроили бы делать то, что хотите, каждые 5 секунд.

Предположим, ваш сервисный модуль называется mystuff.service и установлен в / etc / systemd / system (проверьте Пользовательские службы SystemD , если вы хотите заменить crontab пользователя), тогда вы можете написать модуль таймера для запуска службы во время загрузки, а затем каждые 5 секунд, например:

/etc/systemd/system/mystuff.timer

[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target

Затем перезагрузите конфигурации systemd, включите блок таймера и запустите его.

3
ответ дан 30 December 2016 в 21:25

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

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

2
ответ дан 30 December 2016 в 21:25

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

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