У меня есть сценарий, который нужно запускать каждые пять секунд. Я знаю, что 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 секунд)…?