LinuxForum.Fans
Тема

Автоматический перезапуск при падении

Автор: vini111 10 сообщений 5148 просмотров
#262764

Рябята подскажите!
Дебиан 5
Есть бинарнык допустим test в директори bin
Запуск его происходит /bin/test -b
В топе имя процеса для примера test

Задача каждые 2 секунды отслеживать активный ли процесс. Если нет его автоматом запускать..

#262767

Проверить наличие процесса можно

text
ps -A | grep test
#262770

А отслежывать автоматом каждые 2 секунды и в сучаи падения запускать просто нада чтобы ето все дело на автомате было

#262771
text

#!/bin/bash
while [ 1 ]
do
    /bin/test -b
done
#262772

neol, если я не ошибаюсь, предложенный вами скрипт будет просто безостановочно запускать процесс /bin/test -b, даже если он уже запущен.

#262774
"Lupo Alberto" написал:
neol, если я не ошибаюсь, предложенный вами скрипт будет просто безостановочно запускать процесс /bin/test -b, даже если он уже запущен.

Если это не демон, то не будет. Да и демоны обычно имеют в арсенале ключи, позволяющие запускать их не как фоновый процесс. Надо было сразу уточнить.

#262795

neol, а можете расказать, почему и как работает этот гениальный скрипт для нубов в bash-скриптиге?

#262798

Тогда уж

text
#!/bin/bash
while true; do
          if [ pidof test ] then sleep 2;
          else test -b;
          fi;
done

Я, конечно, в скриптинге не силен, но думаю, что как-то так. Проверить сейчас не могу, я с телефона.

#262800
"SoaT" написал:
neol, а можете расказать, почему и как работает этот гениальный скрипт для нубов в bash-скриптиге?

Баш выполняет команды последовательно и если не отправлять запущенную софтину в фон ( test -b & ), то следующая итерация бесконечного цикла начнется только после завершения ( или падения ) запущенной софтины.

PS Меня трижды из пед университета выгоняли, так что педагогическими талантами явно не блещу (: Если что-то непонятно, спрашивайте.

yars написал:

Тогда уж
text

#!/bin/bash
while true; do
          if [ pidof test ] then sleep 2;
          else test -b;
          fi;
done

Я, конечно, в скриптинге не силен, но думаю, что как-то так. Проверить сейчас не могу, я с телефона.

Да, так лучше, только с ";" напутали чуть-чуть. Если я сам не запутался, то рабочий вариант будет:

text

while true; do
    if [ "`pidof test`" ] ; then sleep 2
        else; test -b
    fi
done

А еще лучше

text

while true
do
    if [ "`pidof test`" ] 
    then
        sleep 2
    else
        test -b
    fi
done

Легче прочитать и понять, ИМХО.

Конструкция [ "`pidof test`" ] сгорожена потому что:
`pidof test` - вернет результат выполнения команды, а без кавычек ругнется
"`pidof test`" - интерпретирует этот результат как строку (иначе будет ругань при возвращении нескольких пидов)

#262801

neol, только сейчас понял про "отправлять в фон". Всё действительно просто, спасиб что разьяснили)

Войдите или зарегистрируйтесь, чтобы ответить.