LinuxForum.Fans
Тема

Нужен скрипт проверки и перезапуска демона

Автор: lark 14 сообщений 8574 просмотров
#29624

Вечер добрый :)

Уважаемые гуру, очень прошу помочь начинающему юзеру, так как уже достала эта лажа. Хочу написать задание для крона проверять поднятие рррое по pid файлу или еще как-нибудь и перезапускать в случае падения. Только не говорите мне что pppd это все умеет (Debian Lenny). У моего провайдера (или это модем?) какая-то интересная особенность - он после падения сессии минуты две глухо молчит и за это время pppd пытается законнектиться, у него ничего не получается и он говорит что модем умер и делает ноги. Если кто знает как заставить pppd ломиться минут 3-5 нисмотря ни на что - я буду очень рад совету. После 5-ти минут если руками набрать pon то все коннектиться без проблем и работает следующие сутки.
Ну а пока очень прошу помощи в написании скрипта который бы проверял pid pppoe и в случае его отсутствия запускал подключение заново.

#29679

Если вы знаете pid, то проверить жив ли он можно так:

text

if kill -0 $pid
then
    echo alive
else
    echo dead
fi

Одно но, проверять нужно от того же юзера от которого запущен процесс $pid или от рута, иначе получите "permission denied".

#29704
text
#! /bin/sh
# или /bin/bash или /usr/bin/bash (не в курсе, где там что дежит в дебиане)

#Имя файла процесса PID_FILE="/var/run/pppd.pid" #Имя исполняемого модуля (тут тоже нужно глянуть по поводу что и где в Дебиане BIN_DIR="/usr/sbin/pppd"

checkproc -p ${PID_FILE} ${BIN_DIR} case $? in 0) echo -n " - Warning: daemon already running " ;; 1) echo -n "- Warning: ${PID_FILE} exists. ";; esac startproc -p ${PID_FILE} {$BIN_DIR}

#29721

Здравствуйте, сразу скажу, что новичек в этом всём, но кое что уже успел понять :)
у меня похожая проблема, у меня стоит Debian и используется он в качестве шлюза доступа в интернет, установлена на нем служба upnpd для автоматического перенаправления портов.
Время от времени она перестает работать - зависает (процесс висит, но порты не открываются), либо просто отключается. Может поработать и несколько суток без проблем, а может и через 1-2 часа отключиться сама по себе:)

В общем нужен скрипт для проверки - запущена ли эта служба или нет :) чтобы скрипт в случае необнаружения службы в процессах - запускал ее поновой:)

скрипт который выше подойдет?

#30057
Hvzh написал:
checkproc -p ${PID_FILE} ${BIN_DIR}
case $? in
0) echo -n " - Warning: daemon already running " ;;
1) echo -n "- Warning: ${PID_FILE} exists. ";;
esac
startproc -p ${PID_FILE} {$BIN_DIR}

о выделенных командах баш говорит что не знает. Вот такой он Дебиан :) а еще чего-то доустанавливать неохота

admin написал:
if kill -0 $pid
then
echo alive
else
echo dead
fi

вот тут думаю смысл есть. только как вместо $pid номер из этого файла подставить? програмеры, отзовитесь

#30102
lark написал:
о выделенных командах баш говорит что не знает. Вот такой он debian   а еще чего-то доустанавливать неохота

От рута запускали?

#30112
Hvzh написал:
[quote=lark]о выделенных командах баш говорит что не знает. Вот такой он debian   а еще чего-то доустанавливать неохота

От рута запускали?[/quote]
Я их у себя вообще не нашёл, не нашёл их и на сайте Debian при поиске пакетов,
содержащих данный файл.

Пётр.

#30161
lark написал:
только как вместо $pid номер из этого файла подставить?
text

`cat /path/to/pid/file`
#30482
Hvzh написал:
От рута запускали?

ясное дело :)

вот он, корявый, но работающий вариант :)

#! /bin/sh
#
#
#
ID_PPP=$(cat /var/run/ppp0.pid)

if kill -0 $ID_PPP
then
exit
else
pon
fi


если рррое поднято скриптик глянул и ушел, но а если все упало...... то cat ругается что нету файла, kill матерится что неверный параметр, но ррр поднимаеться :D как-бы еще всю эту ругань отправить правильно в /dev/null ? подскажите люди.... хотя и так все работает, но хотелось чтоб правильно все было

#30547

нужно инклудить файл
. /lib/lsb/init-functions
там уже есть
status_of_proc ()
killproc ()
с этим и работайте.

#30563
system-root написал:
нужно инклудить файл
. /lib/lsb/init-functions
там уже есть
status_of_proc ()
killproc ()
с этим и работайте.

хороший скриптик только понять не програмеру куда и как это все слепить довольно сложно. хотя.... ради спортивного интереса попробую на досуге. я так понимаю для моей задачки достаточно одного status_of_proc ()

Всем спасибо smile

#30572
lark написал:
я так понимаю для моей задачки достаточно одного status_of_proc ()

там конструкция вроде

text
PIDFILE=ну_и_так_ясно_что_сюда_писать
ret=0
    status_of_proc -p ${PIDFILE} путь_до_бинарника имя_процесса 2>/dev/null || ret=$?

потом берем переменную $ret и что-то с ней делаем.

#30636
lark написал:
[quote=Hvzh]От рута запускали?

ясное дело :)

вот он, корявый, но работающий вариант :)

#! /bin/sh
#
#
#
ID_PPP=$(cat /var/run/ppp0.pid)

if kill -0 $ID_PPP
then
exit
else
pon
fi


если рррое поднято скриптик глянул и ушел, но а если все упало...... то cat ругается что нету файла, kill матерится что неверный параметр, но ррр поднимаеться :D как-бы еще всю эту ругань отправить правильно в /dev/null ? подскажите люди.... хотя и так все работает, но хотелось чтоб правильно все было

[/quote]

text

#! /bin/sh
#
#
#
ID_PPP=$(cat /var/run/ppp0.pid 2>/dev/null)

if kill -0 $ID_PPP 2>/dev/null then exit else pon fi

#30963

Цель достигнута - все работает. ура, товарищи :) всем большое спасибо :D последний вариант от admina абсолютно корректно работает.

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