URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 60893
[ Назад ]

Исходное сообщение
"помогите со скриптом"

Отправлено anatoly , 13-Окт-05 13:51 
Помогите с написанием простого shell-скрипта, примерно такого содержания:

while true
  здесь запустить демон
done

Смысл в том, чтобы при падении демона (по какой-либо причине) он запустился бы вновь из скрипта. Я не очень силен в bash/sh :) потому прошу общественность помочь. Кстати, у демона есть ключ, запускающий его в фоне (вероятно '&' не нужно ставить в конце ком.строки?).

Заранее премного благодарен!


Содержание

Сообщения в этом обсуждении
"помогите со скриптом"
Отправлено Brainbug , 13-Окт-05 14:36 
>Помогите с написанием простого shell-скрипта, примерно такого содержания:
>
>while true
>  здесь запустить демон
>done
>
>Смысл в том, чтобы при падении демона (по какой-либо причине) он запустился
>бы вновь из скрипта. Я не очень силен в bash/sh :)
>потому прошу общественность помочь. Кстати, у демона есть ключ, запускающий его
>в фоне (вероятно '&' не нужно ставить в конце ком.строки?).
>
>Заранее премного благодарен!


1. Sistema kakaja ?
2. Kak mozno odnozna4no opredelit 4to process zaver6ilsa za islku4enijem
listinga processov ?


"помогите со скриптом"
Отправлено anatoly , 13-Окт-05 15:32 
>
>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

Разве не так?


"помогите со скриптом"
Отправлено Brainbug , 13-Окт-05 16:26 
>>
>>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 inittab

Togda sam process init budet sledit za zapuskajemim processom i
v slu4aje ego viklu4enija budet perezapuskat ego vnov.


"помогите со скриптом"
Отправлено anatoly , 14-Окт-05 05:16 
>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 :)


"помогите со скриптом"
Отправлено edwin , 14-Окт-05 08:22 
>Да, верно... Возможно так будет правильнее:
>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 :)



"помогите со скриптом"
Отправлено edwin , 14-Окт-05 08:30 

>Итого - при упавшем демоне скрипт его не подымет ;((
>Намного грамотнее проверять наличие PID файла демона.

Попутно выясняя , есть ли процесс с таким PID


"помогите со скриптом"
Отправлено allez , 14-Окт-05 09:51 
>
>>Итого - при упавшем демоне скрипт его не подымет ;((
>>Намного грамотнее проверять наличие PID файла демона.
>
>Попутно выясняя , есть ли процесс с таким PID


Полностью согласен, но позволю одно маленькое уточнение: чтобы grep не
нашел сам себя в списке процессов, можно использовать такую конструкцию:
ps ax | grep -w perl | grep -v grep

Для anatoly: inittab нелогично использовать лишь для тех демонов, которые
то запускаются, то останавливаются. Если же демон должен запуститься при
старте системы и не прекращать работы до ее (системы) остановки, причем
"возрождаясь" в случае безвременной кончины, то логичнее inittab'a и нет
ничего.


"помогите со скриптом"
Отправлено edwin , 14-Окт-05 09:55 
>>
>>>Итого - при упавшем демоне скрипт его не подымет ;((
>>>Намного грамотнее проверять наличие PID файла демона.
>>
>>Попутно выясняя , есть ли процесс с таким PID
>
>
>Полностью согласен, но позволю одно маленькое уточнение: чтобы grep не
>нашел сам себя в списке процессов, можно использовать такую конструкцию:
>ps ax | grep -w perl | grep -v grep

А я и не знаю.
Большое Вам спасибо.

>Для anatoly: inittab нелогично использовать лишь для тех демонов, которые
>то запускаются, то останавливаются. Если же демон должен запуститься при
>старте системы и не прекращать работы до ее (системы) остановки, причем
>"возрождаясь" в случае безвременной кончины, то логичнее inittab'a и нет
>ничего.

Это будем наиболее разумным.


"помогите со скриптом"
Отправлено Brainbug , 14-Окт-05 12:28 
>>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.



"помогите со скриптом"
Отправлено anatoly , 14-Окт-05 14:55 
Всем спасибо за рекомендации, решил-таки воспользоваться inittab'ом. Добавил запись:

d:345:respawn:/path/to/my/daemon -d

Рестартовал init, демон запустился, исправно работает, но периодически в логах сообщения:

init: Id "d" respawning too fast: disabled for 5 minutes

Судя по всему, проблема в демоне, слишком быстро падает?