У меня есть скрипт, который нужно запускать каждые пять секунд. Я знаю, что cron
может выполнять задачи по минутам, но есть ли способ запускать что-то каждую секунду?
Крон позволяет использовать только минимум одну минуту. Что вы могли бы сделать, так это написать скрипт оболочки с бесконечным циклом, который запускает вашу задачу, а затем спит в течение 5 секунд. Таким образом, ваша задача будет выполняться более или менее каждые 5 секунд, в зависимости от того, сколько времени занимает сама задача.
#!/bin/bash
while true; do
# Do something
sleep 5;
done
Вы можете создать файл my-task.sh
с содержимым, приведенным выше, и запустить его с помощью sh my-task.sh
. Опционально вы можете настроить его с помощью supervisor
в качестве сервиса, чтобы он запускался при загрузке системы и т.д.
Это действительно звучит так, как будто вы делаете что-то, что вам, вероятно, не следует делать. Это кажется неправильным .
Просто используйте петлю:
while true ; do ./your-script & sleep 5; done
Это запустит ваш сценарий как фоновое задание, в спящем режиме в течение 5 секунд, а затем снова петлю.
Вы можете использовать Ctrl-C для его прерывания или использовать любое другое условие вместо true
, например, ! Тест -f /tmp/stop-my-script
только для того, чтобы зацикливаться, пока файл /tmp/stop-my-script
не существует.
Вы могли бы иметь задание 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 секунд?
Вы можете использовать пакет GNU mcron , альтернативу «Vixie cron».
http://www.gnu.org/software/mcron/manual/mcron.html#Top
«Можно легко указать более точные временные точки, например секунды. В принципе, это может быть увеличено до микросекунд, но это не реализовано».
Минимальная конфигурация в cron - минуты, вы не можете установить ее в течение 5 секунд. Можно использовать кварц, который разрешает секунды. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
Вы можете использовать таймер 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, включите блок таймера и запустите его.
Я делал подобные вещи очень успешно (и конечный результат сканирует недели за раз, пока машина не будет перезагружена). Что касается того, что я делал сейчас, обновление информации и помещение ее в кэш - обновление каждые 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'.
Используйте cacti для мониторинга маршрутизатора и коммутатора, но Cron разрешает не менее одной минуты, поэтому если один порт / устройство не работает, предупреждение появляется только через две минуты.