У меня есть скрипт, который нужно запускать каждые пять секунд. Я знаю, что cron
может выполнять задачи по минутам, но есть ли способ запускать что-то каждую секунду?
sleep 5
паузы (возможно, в пределах цикла) на 5 секунд) ...?
У меня есть скрипт, который нужно запускать каждые пять секунд. Я знаю, что cron
может выполнять задачи по минутам, но есть ли способ запускать что-то каждую секунду?
sleep 5
паузы (возможно, в пределах цикла) на 5 секунд) ...?
Ответы:
Крон позволяет только минимум одну минуту. Что вы можете сделать, это написать сценарий оболочки с бесконечным циклом, который выполняет вашу задачу, а затем спит в течение 5 секунд. Таким образом, ваша задача будет выполняться более или менее каждые 5 секунд, в зависимости от того, сколько времени занимает сама задача.
#!/bin/bash
while 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 секунд?
/media
каталог на наличие диска, который я подключаю к usb для автоматического резервного копирования ...
What on EARTH
- статистика, сборка мусора, синхронизация файлов, онлайн-статус, вы называете это.
Просто используйте цикл:
while true ; do ./your-script & sleep 5; done
Это запустит ваш скрипт как фоновое задание, поспит 5 секунд, затем снова зациклится. Вы можете использовать Ctrl-C, чтобы прервать его, или использовать любое другое условие вместо true
, например, ! test -f /tmp/stop-my-script
только для зацикливания, пока файл /tmp/stop-my-script
не существует.
bash: syntax error near unexpected token ';'
, поэтому я вынул его. У меня bash 4.3.11. Моя команда выполняется быстро, поэтому все в порядке, если она выполняется на переднем плане.
./your-script
было работать в фоновом режиме (во время 5-секундного сна), вы можете оставить, &
но сбросить ;
. Поскольку это &
служит для разделения команд, нет необходимости (и, по-видимому, это запрещено) иметь ;
после него одну и ту же строку. Другой способ - написать цикл в несколько строк (с разрывом строки после &
и, по желанию, также с разрывом строки после do
и до done
). Поскольку ;
после, &
кажется, опечатка, я удалил его. голубоглазый: пожалуйста, не стесняйтесь поставить ;
обратно, если вы действительно этого хотите; если так, я предлагаю также добавить объяснение.
Вы можете использовать пакет GNU mcron , альтернативу "Vixie cron".
http://www.gnu.org/software/mcron/manual/mcron.html#Top
«Может легко указывать более точные моменты времени, т.е. секунды. В принципе это может быть расширено до микросекунд, но это не реализовано».
mcron
требует sendmail
установки и активации по умолчанию. как это отключить?
Минимальная конфигурация в cron - минуты, вы не можете установить ее в течение 5 секунд. Вы можете использовать Кварц, который позволяет секунд. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
Используйте cacti для мониторинга маршрутизатора и коммутатора, но Cron позволяет использовать не менее одной минуты, поэтому, если один порт / устройство отключен, предупреждения не будет, пока не пройдут две минуты.
Вы можете использовать модуль таймера 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» перезапускает скрипт, но заменяет запущенный скрипт. Первоначально он может быть запущен с помощью строки @reboot crontab.
while
цикл вместо повторного запуска сценария?