Вечер добрый :)
Уважаемые гуру, очень прошу помочь начинающему юзеру, так как уже достала эта лажа. Хочу написать задание для крона проверять поднятие рррое по pid файлу или еще как-нибудь и перезапускать в случае падения. Только не говорите мне что pppd это все умеет (Debian Lenny). У моего провайдера (или это модем?) какая-то интересная особенность - он после падения сессии минуты две глухо молчит и за это время pppd пытается законнектиться, у него ничего не получается и он говорит что модем умер и делает ноги. Если кто знает как заставить pppd ломиться минут 3-5 нисмотря ни на что - я буду очень рад совету. После 5-ти минут если руками набрать pon то все коннектиться без проблем и работает следующие сутки.
Ну а пока очень прошу помощи в написании скрипта который бы проверял pid pppoe и в случае его отсутствия запускал подключение заново.
Нужен скрипт проверки и перезапуска демона
Если вы знаете pid, то проверить жив ли он можно так:
if kill -0 $pid
then
echo alive
else
echo dead
fi
Одно но, проверять нужно от того же юзера от которого запущен процесс $pid или от рута, иначе получите "permission denied".
#! /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}
Здравствуйте, сразу скажу, что новичек в этом всём, но кое что уже успел понять :)
у меня похожая проблема, у меня стоит Debian и используется он в качестве шлюза доступа в интернет, установлена на нем служба upnpd для автоматического перенаправления портов.
Время от времени она перестает работать - зависает (процесс висит, но порты не открываются), либо просто отключается. Может поработать и несколько суток без проблем, а может и через 1-2 часа отключиться сама по себе:)
В общем нужен скрипт для проверки - запущена ли эта служба или нет :) чтобы скрипт в случае необнаружения службы в процессах - запускал ее поновой:)
скрипт который выше подойдет?
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}
о выделенных командах баш говорит что не знает. Вот такой он Дебиан :) а еще чего-то доустанавливать неохота
if kill -0 $pid
then
echo alive
else
echo dead
fi
вот тут думаю смысл есть. только как вместо $pid номер из этого файла подставить? програмеры, отзовитесь
о выделенных командах баш говорит что не знает. Вот такой он debian а еще чего-то доустанавливать неохота
От рута запускали?
[quote=lark]о выделенных командах баш говорит что не знает. Вот такой он debian а еще чего-то доустанавливать неохота
От рута запускали?[/quote]
Я их у себя вообще не нашёл, не нашёл их и на сайте Debian при поиске пакетов,
содержащих данный файл.
Пётр.
только как вместо $pid номер из этого файла подставить?
`cat /path/to/pid/file`
От рута запускали?
ясное дело :)
вот он, корявый, но работающий вариант :)
#! /bin/sh
#
#
#
ID_PPP=$(cat /var/run/ppp0.pid)
if kill -0 $ID_PPP
then
exit
else
pon
fi
если рррое поднято скриптик глянул и ушел, но а если все упало...... то cat ругается что нету файла, kill матерится что неверный параметр, но ррр поднимаеться :D как-бы еще всю эту ругань отправить правильно в /dev/null ? подскажите люди.... хотя и так все работает, но хотелось чтоб правильно все было
нужно инклудить файл
. /lib/lsb/init-functions
там уже есть
status_of_proc ()
killproc ()
с этим и работайте.
нужно инклудить файл
. /lib/lsb/init-functions
там уже есть
status_of_proc ()
killproc ()
с этим и работайте.
хороший скриптик только понять не програмеру куда и как это все слепить довольно сложно. хотя.... ради спортивного интереса попробую на досуге. я так понимаю для моей задачки достаточно одного status_of_proc ()
Всем спасибо smile
я так понимаю для моей задачки достаточно одного status_of_proc ()
там конструкция вроде
PIDFILE=ну_и_так_ясно_что_сюда_писать
ret=0
status_of_proc -p ${PIDFILE} путь_до_бинарника имя_процесса 2>/dev/null || ret=$?потом берем переменную $ret и что-то с ней делаем.
[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]
#! /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
Цель достигнута - все работает. ура, товарищи :) всем большое спасибо :D последний вариант от admina абсолютно корректно работает.