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

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

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

#!/bin/bashwhile true; do  # Do something  sleep 5;done

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

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

Вы могли бы иметь 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) &

Однако мой вопрос заключается в следующем Что на ЗЕМЛЕ не могли бы вы делать то, что нужно запускать каждые 5 секунд?

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

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

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

Вы могли бы использовать пакет GNU макрон, альтернатива "Vixie cron".

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

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

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

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

/etc/systemd/system/mystuff.timer

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

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

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

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

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

#!/bin/shSLEEP=5# do stuffsleep $SLEEP# do stuffsleep $SLEEP# do stuffsleep $SLEEP# do stuffsleep $SLEEP# echo and restart...exec $0

Команда 'exec $0' перезапускает скрипт, но заменяет запущенный скрипт. Изначально его можно запустить с помощью строки crontab "@reboot".

Какую проблему вы пытаетесь решить? Вы уверены, что cron - это правильное решение?

Извините, наверное, я немного неправильно понял вопрос. Тем не менее, я все еще задаюсь вопросом, пытаетесь ли вы решить правильную проблему.

Я знаю, что cron - неправильное решение. Я говорил, что этого не было в вопросе. Пожалуйста, прочтите. Я пытаюсь заставить скрипт запускаться каждые 5 секунд.

Для людей, которые приходят сюда и ищут, как запускать что-то каждые 5 секунд. Я настоятельно рекомендую вместо этого вам изучить, как программировать в реальном времени с помощью таких инструментов, как socket.ввод-вывод в качестве примера.

Вы открыли для себя команду bash sleep? “sleep 5” приостанавливается (возможно, в цикле) на 5 секунд)…?