Помогите с написанием простого shell-скрипта, примерно такого содержания:while true
здесь запустить демон
doneСмысл в том, чтобы при падении демона (по какой-либо причине) он запустился бы вновь из скрипта. Я не очень силен в bash/sh :) потому прошу общественность помочь. Кстати, у демона есть ключ, запускающий его в фоне (вероятно '&' не нужно ставить в конце ком.строки?).
Заранее премного благодарен!
>Помогите с написанием простого shell-скрипта, примерно такого содержания:
>
>while true
> здесь запустить демон
>done
>
>Смысл в том, чтобы при падении демона (по какой-либо причине) он запустился
>бы вновь из скрипта. Я не очень силен в bash/sh :)
>потому прошу общественность помочь. Кстати, у демона есть ключ, запускающий его
>в фоне (вероятно '&' не нужно ставить в конце ком.строки?).
>
>Заранее премного благодарен!
1. Sistema kakaja ?
2. Kak mozno odnozna4no opredelit 4to process zaver6ilsa za islku4enijem
listinga processov ?
>
>1. Sistema kakaja ?
linux
>2. Kak mozno odnozna4no opredelit 4to process zaver6ilsa za islku4enijem
>listinga processov ?
мыслю так:while 1
/path/to/daemon -d #run as background
#если демон завершился - попадаем сюда и и переходим на новый круг цикла
doneРазве не так?
>>
>>1. Sistema kakaja ?
>linux
>>2. Kak mozno odnozna4no opredelit 4to process zaver6ilsa za islku4enijem
>>listinga processov ?
>мыслю так:
>
>while 1
> /path/to/daemon -d #run as background
> #если демон завершился - попадаем сюда и и переходим на
>новый круг цикла
>done
1. Jesli demon zapustitca normalno, to t.k. on podderzivajet
rabotu v daemon rezime, srazu osvobodit terminal i vernet kod
vipolnenija komandi. Skazem 0. No tut-zhe snova budet popitka
zapustit e6e odin takoi demon, i tak do beskone4nosti.2. Jesli en zapustitca korektno, togda budet o 6ibka i kod o6ibki
vozvratit i snova budet probovat zapuskatca. I tak beskone4no.
>
>Разве не так?Ispolzui inittab ili storonije skripti dla upravlenija.
man inittabTogda sam process init budet sledit za zapuskajemim processom i
v slu4aje ego viklu4enija budet perezapuskat ego vnov.
>1. Jesli demon zapustitca normalno, to t.k. on podderzivajet
>rabotu v daemon rezime, srazu osvobodit terminal i vernet kod
>vipolnenija komandi. Skazem 0. No tut-zhe snova budet popitka
>zapustit e6e odin takoi demon, i tak do beskone4nosti.
Да, верно... Возможно так будет правильнее:
while 1
ps ax | grep -w daemon
if [ $? != 0 ]
#демон не запущен - запускаем
/path/to/daemon -d
fi
done>Ispolzui inittab ili storonije skripti dla upravlenija.
>man inittab
>
>Togda sam process init budet sledit za zapuskajemim processom i
>v slu4aje ego viklu4enija budet perezapuskat ego vnov.
IMHO inittab не совсем логично использовать? У меня обычное пользовательное приложение, хотелось бы обойтись /etc/rc.local :)
>Да, верно... Возможно так будет правильнее:
>while 1
> ps ax | grep -w daemon
> if [ $? != 0 ]
> #демон не запущен - запускаем
> /path/to/daemon -d
> fi
>doneОн работать не будет.
На высоконагруженных системах grep попадет в списов процессов:
[monitor]@edwin 07:17:50>ps axw | grep -w perl
74180 p0 R+ 0:00,00 grep -w perl
61856 p7- I 0:07,10 /usr/bin/perl /home/edwin/bin/daemon-perl.pl (perl5.8.6)
624 con- I+ 0:08,20 /usr/bin/perl -w /usr/local/work/soundnagios.pl (perl5.8.6)
628 con- I+ 1:17,60 /usr/bin/perl -w /usr/local/work/wwreport.pl (perl5.8.6)Итого - при упавшем демоне скрипт его не подымет ;((
Намного грамотнее проверять наличие PID файла демона.>
>>Ispolzui inittab ili storonije skripti dla upravlenija.
>>man inittab
>>
>>Togda sam process init budet sledit za zapuskajemim processom i
>>v slu4aje ego viklu4enija budet perezapuskat ego vnov.
>IMHO inittab не совсем логично использовать? У меня обычное пользовательное приложение, хотелось
>бы обойтись /etc/rc.local :)
>Итого - при упавшем демоне скрипт его не подымет ;((
>Намного грамотнее проверять наличие PID файла демона.Попутно выясняя , есть ли процесс с таким PID
>
>>Итого - при упавшем демоне скрипт его не подымет ;((
>>Намного грамотнее проверять наличие PID файла демона.
>
>Попутно выясняя , есть ли процесс с таким PID
Полностью согласен, но позволю одно маленькое уточнение: чтобы grep не
нашел сам себя в списке процессов, можно использовать такую конструкцию:
ps ax | grep -w perl | grep -v grepДля anatoly: inittab нелогично использовать лишь для тех демонов, которые
то запускаются, то останавливаются. Если же демон должен запуститься при
старте системы и не прекращать работы до ее (системы) остановки, причем
"возрождаясь" в случае безвременной кончины, то логичнее inittab'a и нет
ничего.
>>
>>>Итого - при упавшем демоне скрипт его не подымет ;((
>>>Намного грамотнее проверять наличие PID файла демона.
>>
>>Попутно выясняя , есть ли процесс с таким PID
>
>
>Полностью согласен, но позволю одно маленькое уточнение: чтобы grep не
>нашел сам себя в списке процессов, можно использовать такую конструкцию:
>ps ax | grep -w perl | grep -v grepА я и не знаю.
Большое Вам спасибо.
>Для anatoly: inittab нелогично использовать лишь для тех демонов, которые
>то запускаются, то останавливаются. Если же демон должен запуститься при
>старте системы и не прекращать работы до ее (системы) остановки, причем
>"возрождаясь" в случае безвременной кончины, то логичнее inittab'a и нет
>ничего.Это будем наиболее разумным.
>>1. Jesli demon zapustitca normalno, to t.k. on podderzivajet
>>rabotu v daemon rezime, srazu osvobodit terminal i vernet kod
>>vipolnenija komandi. Skazem 0. No tut-zhe snova budet popitka
>>zapustit e6e odin takoi demon, i tak do beskone4nosti.
>Да, верно... Возможно так будет правильнее:
>while 1
> ps ax | grep -w daemon
> if [ $? != 0 ]
> #демон не запущен - запускаем
> /path/to/daemon -d
> fi
>done
>
>>Ispolzui inittab ili storonije skripti dla upravlenija.
>>man inittab
>>
>>Togda sam process init budet sledit za zapuskajemim processom i
>>v slu4aje ego viklu4enija budet perezapuskat ego vnov.
>IMHO inittab не совсем логично использовать? У меня обычное пользовательное приложение, хотелось
>бы обойтись /etc/rc.local :)Kak raz, kak uzhe pislos, ispolzovatj inittab i jest samij lu46ij
put v dannmo slu4aje. Pri uslovii 4to ho4etca realizovatj vse sderstvami
samoi sistemi. Jesli storonnije ve6i, to jest naprimer daemontools i
monogo analogov.
Всем спасибо за рекомендации, решил-таки воспользоваться inittab'ом. Добавил запись:d:345:respawn:/path/to/my/daemon -d
Рестартовал init, демон запустился, исправно работает, но периодически в логах сообщения:
init: Id "d" respawning too fast: disabled for 5 minutes
Судя по всему, проблема в демоне, слишком быстро падает?