@zednight

Бесконечный цикл с контролем запуска, как?

Есть некая процедура, которая обрабатывает записи, в зависимости от количества записей она может выполняться в сильно различающиеся временные интервалы. Процедура может вылетать с ошибкой. Запускать ее параллельно нельзя, иначе несколько записей могут начать обрабатываться одновременно. В общем сейчас у нее есть механизм блокировки с лимитом пропусков задания и он висит в кроне. Количество записей на обработку растет довольно быстро и скоро процедура не будет справляться с этим объемом при запуске в 10 мин. Хочу посадить ее на непрерывный цикл типа:
while true; do ./my_scripts; sleep 10; done;
Но если по какой-то причине цикл разрушится или терминал где запущен скрипт выключится, или комп перезагрузится, то все станет еще хуже. Как можно сделать нечто подобное с контролем запуска, и скажем раз в 10 мин в кроне проверять, что скрипт работает?
  • Вопрос задан
  • 3184 просмотра
Решения вопроса 1
RicoX
@RicoX
Ушел на http://ru.stackoverflow.com/
Ну с ходу придумалось как-то так:
#!/bin/bash

mkdir -p "$HOME/tmp"
PIDFILE="$HOME/tmp/myprogram.pid"

if [ -e "${PIDFILE}" ] && (ps -u $(whoami) -opid= |
                           grep -P "^\s*$(cat ${PIDFILE})$" &> /dev/null); then
  echo "Already running."
  exit 99
fi

/path/to/myprogram > $HOME/tmp/myprogram.log &

echo $! > "${PIDFILE}"
chmod 644 "${PIDFILE}"

И в крон типа:
*/5 * * * * $HOME/cron/watchdog.sh > $HOME/cron/watchdog.log 2>&1


Вообще то что вы хотите называется watchdog ищите по этому слову, реализаций хватает на любом скриптовом языке.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@aardvarkx1
Попробуйте monit. Он будет следить за процессом и если надо перезапускать, автоматически запускать при перезагрузке и т.д.
Ответ написан
Комментировать
@mayorovp
Посмотрите обертки для демонов: daemon, start-stop-daemon, и пр. Их много, но делают они примерно одно и то же. Некоторые из них умеют восстанавливать упавшего демона, для других можно в том же кроне проверять статус.
Ответ написан
Комментировать
@Wolf4ara
сисадмин и не более
У нас для этого собачка на баше написана, проверяет запущен ли скрипт (pgrep), и запускает, если умер, оставляя записи в логу. А вообще monit тож не плох.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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