Задать вопрос

Выполнение скрипта раз в 5 секунд Linux

Здравствуйте. Необходимо, чтобы скрипт /var/filter.sh запускался раз в 5 секунд без всяких команд. Т.е. один раз его запустил после перезагрузки ОС, а дальше он уже висел в процессах и выполнялся.
  • Вопрос задан
  • 34170 просмотров
Подписаться 10 Простой Комментировать
Решения вопроса 1
@starosta6123
Вспомнил:
# watch --interval=5 /var/filter.sh

еще полезное применение watch
nsk.lug.ru/poleznye-sovety/poleznye-sovety-komanda...
www.opennet.ru/man.shtml?topic=watch&category=1&ru...

Можно вывод направить в /dev/null
# watch --interval=5 /var/filter.sh > /dev/null

Не совсем подходит под вашу цель, но возьмите на заметку.
Запускает с интервалом в 5 секунд ваш скрипт.
Единственное учтите, если ваш скрипт не будет успевать выполниться за пять секунд, то может быть эффект "лавинного рождения новых процессов". Особенно может возникнуть, если скрипт использует блокировки.

А со sleep очень просто ru.wikipedia.org/wiki/Sleep

/var/filter.sh
#!/bin/sh
echo "Начинаем..."
while (true) 
do
 echo "Ваш скрипт";
 sleep 5; # пауза 5 секунд
done;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Вообще для этого есть snaked.

Но если уж городить костыли, то:
#!/bin/bash
while :; do sleep 5; flock -n /tmp/lock1 -c /var/script.sh & done


Эта конструкция будет запускать скрипт примерно каждые 5.04 секунды (помимо пяти секунд ещё будет тратиться время на вызов sleep и execve скрипта). При том само время работы скрипта уже не будет влиять на "каждые 5 секунд". Flock здесь нужен на тот случай, если скрипт "залипнет" - чтобы не плодить много запущенных копий скрипта в системе. Если скрипт ходит куда-то наружу или в базу - обязательно используйте flock.

Дальше нужно обеспечить надежный запуск самого цикла. Тут уже на помощь придет cron (вместе с flock). Добавляйте в /etc/crontab такую строку:
* * * * * root flock -n /tmp/lock2 -c /path/to/script2

Каждую минуту крон будет пытаться запустить вторую копию цикла, если lock2 занят - то запускать не будет.
Можно, конечно, просто добавить скрипт цикла в /etc/rc.local, но если он сдохнет - то уже потом не запустится.
Ответ написан
Либо в cron, либо тело скрипта в бесконечный цикл, в конце (начале) которого задержка (sleep 5).
Второй вариант удобнее, так как гораздо проще выгружать скрипт (просто прибить его, а не выпиливать из cron'а), а также запускать его повторно после выпиливания. Да и он больше подходит под условия, указанные в постановке вопроса (может не запускаться автоматически после перезагрузки, если не ставить в автозагрузку).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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