inittab respawn (Частота проверки inittab respawn)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

desserg
Сообщения: 12
ОС: Linux

inittab respawn

Сообщение desserg »

Как/где можно изменить частоту проверки списка процессов в /etc/inittab, зарегистрированных для рестарта?
Тесты показывают около 5 минут, хотелось бы минуту.
В манах конкретики нет.
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: inittab respawn

Сообщение nesk »

desserg писал(а):
08.07.2009 16:44
Как/где можно изменить частоту проверки списка процессов в /etc/inittab, зарегистрированных для рестарта?
Тесты показывают около 5 минут, хотелось бы минуту.
В манах конкретики нет.


Хм. вообще он мгновенно должен перезапускать.

Как только процесс падает, init об этом узнает, пытается его перезапустить несколько раз. Если несколько раз подряд терпит неудачу, то действительно откладывает это безобразие на пять минут.
Вы хотите уменьшить этот интервал?
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
desserg
Сообщения: 12
ОС: Linux

Re: inittab respawn

Сообщение desserg »

Перезапускаемый процесс - мой собственный тестовый, никаких проблем при перезапуске не имеет.
Длительность запуска менее секунды.
Да, хочу уменьшить до минуты.


nesk писал(а):
08.07.2009 16:48
desserg писал(а):
08.07.2009 16:44
Как/где можно изменить частоту проверки списка процессов в /etc/inittab, зарегистрированных для рестарта?
Тесты показывают около 5 минут, хотелось бы минуту.
В манах конкретики нет.


Хм. вообще он мгновенно должен перезапускать.

Как только процесс падает, init об этом узнает, пытается его перезапустить несколько раз. Если несколько раз подряд терпит неудачу, то действительно откладывает это безобразие на пять минут.
Вы хотите уменьшить этот интервал?
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: inittab respawn

Сообщение nesk »

desserg писал(а):
08.07.2009 16:51
Перезапускаемый процесс - мой собственный тестовый, никаких проблем при перезапуске не имеет.
Длительность запуска менее секунды.
Да, хочу уменьшить до минуты.

а сколько времени Ваша тестовая программа работает? тоже меньше секунды?
Она журнал ведет? сколько раз init её запускает перед тем как сказать дизайбл на пять минут. (мне просто интересно)
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
desserg
Сообщения: 12
ОС: Linux

Re: inittab respawn

Сообщение desserg »

Она не работает, она слушает, это листенер, т.е. висит вечно.
Собственный лог и /var/log/messages попыток рестарта не показывают,
просто примерно через 5 минут программа честно перестартовывается как и положено.
Проблема в интервале.


nesk писал(а):
08.07.2009 17:03
desserg писал(а):
08.07.2009 16:51
Перезапускаемый процесс - мой собственный тестовый, никаких проблем при перезапуске не имеет.
Длительность запуска менее секунды.
Да, хочу уменьшить до минуты.

а сколько времени Ваша тестовая программа работает? тоже меньше секунды?
Она журнал ведет? сколько раз init её запускает перед тем как сказать дизайбл на пять минут. (мне просто интересно)
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: inittab respawn

Сообщение nesk »

можете провести эксперимент
crtl+alt+f1
# echo 'e9:2345:respawn:/bin/echo test >/dev/tty1' >> /etc/inittab
# init q
Что произойдет?
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
desserg
Сообщения: 12
ОС: Linux

Re: inittab respawn

Сообщение desserg »

Вот иниттаб:
o1:35:respawn:/bin/su - oracle -c "/u01/app/oracle/product/10.2.0/db_2/bin/lsnrctl start" >/dev/null 2>&1 </dev/null
e9:2345:respawn:/bin/echo test >/dev/tty1

Ничего не произошло:
[root@hostname ~]# init q
[root@hostname ~]#
[root@hostname ~]#

Зато увидел наконец сообщение в messages:
Id "o1" respawning too fast: disabled for 5 minutes

Что, процесс обязан стартовать очень быстро?




nesk писал(а):
08.07.2009 17:15
можете провести эксперимент
crtl+alt+f1
# echo 'e9:2345:respawn:/bin/echo test >/dev/tty1' >> /etc/inittab
# init q
Что произойдет?
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: inittab respawn

Сообщение nesk »

desserg писал(а):
08.07.2009 17:25
Ничего не произошло:

странно, если Вы переключились на первую консоль (ctrl+alt+f1), то она обычно связана с /dev/tty1
и Вы должны были бы наблюдать несколько сообщений test



desserg писал(а):
08.07.2009 17:25
Зато увидел наконец сообщение в messages:
Id "o1" respawning too fast: disabled for 5 minutes

Что, процесс обязан стартовать очень быстро?


Нет, но процесс обязан не отваливаться очень быстро. То есть слишком часто не падать, что бы его не надо было слишком часто перезапускать.

Таймаут на который init отрубает перезапуск процесса, определяется в коде программы (переменная SLEEPTIME в init.h). То есть без перекомпиляции init Вы его не поменяете. Да и это не требуется. Надо разбираться не с init, а с Вашей тестовой программой.

Еще раз повторю, init узнает о смерти порожденной программы практически мгновенно и так же мгновенно без таймаутов пытается её перезапустить.
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
desserg
Сообщения: 12
ОС: Linux

Re: inittab respawn

Сообщение desserg »

А что может являться причиной этого сообщения?
Выглядит это так, что init пытается стартовать программу, а она реагирует недостаточно быстро, и он пытается стартовать ее еще раз.
А после этого срабатывает триггер на частоту перезапуска.
Листенер - по определению достаточно легковесная программаБ и стартует быстрее одной секунды ...
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: inittab respawn

Сообщение nesk »

desserg писал(а):
08.07.2009 17:49
Выглядит это так, что init пытается стартовать программу, а она реагирует недостаточно быстро, и он пытается стартовать ее еще раз.

Нет. Не так.
init стартует программу, программа завершается, init стартует программу снова, программа завершается, init стартует программу снова, программа завершается, init стартует программу снова, программа завершается, init стартует программу снова, программа завершается, init стартует программу снова, программа завершается, init стартует программу снова.... init'у надоедает эта чехарда и он кладет откладывает очередной перезапуск программы на пять минут. (такая дисквалификация, как в пятиминутный штраф в хоккее)
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
desserg
Сообщения: 12
ОС: Linux

Re: inittab respawn

Сообщение desserg »

Возможно, но попытка скопировать строчку из inittab в командную строку приводит к успешному старту программы,
без малейших проблем.
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: inittab respawn

Сообщение nesk »

desserg писал(а):
08.07.2009 18:01
Возможно, но попытка скопировать строчку из inittab в командную строку приводит к успешному старту программы,
без малейших проблем.


init стартует программу А. Программа A стартует программу B и завершается. init видит, что программа А завершилась и решает её перезапустить. ..... и так далее :crazy:
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
desserg
Сообщения: 12
ОС: Linux

Re: inittab respawn

Сообщение desserg »

Да, но во второй раз - через 5 минут тот-же init стартует программу, и всегда успешно.
Что, в первый и во второй раз используются разные методы старта?
Спасибо сказали:
desserg
Сообщения: 12
ОС: Linux

Re: inittab respawn

Сообщение desserg »

init делает ДВЕ попытки!!!
Результат первой честно пишется во внутренний лог листенера, а результат второй (неуспешной естественно) - в лог inittab:
.... lsnrctl start" > /tmp/ora 2>/tmp/ora
[root@hostname ~]# more /tmp/ora

LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 08-JUL-2009 17:35:33

Copyright © 1991, 2006, Oracle. All rights reserved.

TNS-01106: Listener using listener name LISTENER has already been started
[root@hostname ~]#
Спасибо сказали:
desserg
Сообщения: 12
ОС: Linux

Re: inittab respawn

Сообщение desserg »

Кстати, после принудительной реинициализации
init q
старт тоже проходит нормально - мгновенно ...
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: inittab respawn

Сообщение nesk »

desserg писал(а):
08.07.2009 18:41
/tmp/ora 2>/tmp/ora

так Вы увидите только последний запуск.
надо так:

>> /tmp/ora 2>> /tmp/ora

один знак > опустошает файл каждый раз
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
desserg
Сообщения: 12
ОС: Linux

Re: inittab respawn

Сообщение desserg »

Ну в общем как говорят психиатры - что за болезнь - не знаю, но лечить умею.
Вот такой скрипт помог вылечить паузу в 5 минут, теперь она короткая и настраиваемая.
Хотя исходные причины остаются туманными.

#!/bin/sh

/bin/su - oracle -c "/u01/app/oracle/product/10.2.0/db_2/bin/lsnrctl start"
while [ -n "$(ps -fu oracle|ps -fu oracle|grep -v grep|grep tns)" ]; do
sleep 5
done

Ну и иниттаб, стартующий этот скрипт:

o1:2345:respawn:/home/oracle/bin/start_lis.sh > /tmp/ora 2>/tmp/ora
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: inittab respawn

Сообщение nesk »

desserg писал(а):
09.07.2009 10:33
Ну в общем как говорят психиатры - что за болезнь - не знаю, но лечить умею.

если бы Вы воспользовались бы поиском, то нашли вот это:
Автоматический перезапуск программы
Автоматический перезапуск процесса
* cкрипт обнаружения зависания\падучести с автоперезапуском (+)
Скрипт перезапуска приложения при падении и завершении работы
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
desserg
Сообщения: 12
ОС: Linux

Re: inittab respawn

Сообщение desserg »

Найденное лекарство никак не объясняет артефакт поведения инита.
Причина попытки повторного старта программы неясна ;-(
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: inittab respawn

Сообщение nesk »

desserg писал(а):
09.07.2009 11:29
Найденное лекарство никак не объясняет артефакт поведения инита.
Причина попытки повторного старта программы неясна ;-(


я же писал уже:
init стартует программу А. Программа A стартует программу B и завершается. init видит, что программа А завершилась и решает её перезапустить. ..... и так далее

init запускает su; su запускает скрипт lsnrct; lsnrctl запускает процессы (что Вы там грепаете? tns?) и завершается; завершается su; init видит, что поражденный им процесс завершился и перезапускает su;su запускает скрипт lsnrct;lsnrct видит, что нужные процессыуже запущенны и завершается; init видит, что поражденный им процесс завершился и перезапускает su;su запускает скрипт lsnrct;lsnrct видит, что нужные процессыуже запущенны и завершается; init видит, что поражденный им процесс завершился и перезапускает su;su запускает скрипт lsnrct;lsnrct видит, что нужные процессыуже запущенны и завершается; ..... (это все длиться мение пары секунд)
потом init блокирует перезапуск процесса на 5 минут; потом падает *tns*, потом проходит пять минут и начинается все по новой :
init запускает su; su запускает скрипт lsnrct; lsnrctl запускает процессы (что Вы там грепаете? tns?) и завершается; завершается su; init видит, что поражденный им процесс завершился и перезапускает su;su запускает скрипт lsnrct;lsnrct видит, что нужные процессыуже запущенны и завершается; init видит, что поражденный им процесс завершился и перезапускает su;su запускает скрипт lsnrct;lsnrct видит, что нужные процессыуже запущенны и завершается; init видит, что поражденный им процесс завершился и перезапускает su;su запускает скрипт lsnrct;lsnrct видит, что нужные процессыуже запущенны и завершается; ..... (это все длиться мение пары секунд)
потом init блокирует перезапуск процесса на 5 минут;

и это все повторяется через пять минут, даже если *tns* не падает.


В Вашем "исправленном" варианте init запускает скрипт, который запускает внешние программы, но сам не завершается (до тех пор пока есть нужные Вам процессы. Поскольку Ваш скрипт не завершается без нужды, init не блокирует его перезапуск, и всегда готов его перезапустить моментально.


Так понятно? :crazy:
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
desserg
Сообщения: 12
ОС: Linux

Re: inittab respawn

Сообщение desserg »

Второй раз все стартует нормально (через 5 минут), вот в чем вопрос.
Видимо есть какая-то скрытая логика срабатывания триггера в первый раз и во второй.
Кажущаяся проблема в том, что файл lsnrctl порождает процесс tnslsnr, что есто одно и тоже.
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: inittab respawn

Сообщение nesk »

desserg писал(а):
09.07.2009 12:01
Второй раз все стартует нормально (через 5 минут), вот в чем вопрос.
Видимо есть какая-то скрытая логика срабатывания триггера в первый раз и во второй.

Нет, не так.
1) Старт. 2) тут же моментально несколько фальстартов (которые Вы не видите, но они есть) 3) блокировка на пять (штраф за фальстарт)
Через пять минут, даже если Ваша основная программа не завершилась повторяются фальстарты и блокировка.
А далее если программа завершилась, то она будет запущена максимум через пять минут, когда будет снята блокировка.
То есть в Вашей первой реализации init пытался перезапустить программу каждые пять минут независимо от того, завершилась ли она или нет.


desserg писал(а):
09.07.2009 12:01
Кажущаяся проблема в том, что файл lsnrctl порождает процесс tnslsnr, что есто одно и тоже.

Кажущаяся ?
Реальная.
lsnrctl - стартовый скрипт
tnslsnr - основная программа.
- Это две разные программы (два разных файла) и (что важнее) два разных процесса.

иерархия процессов будет такова:
init->su->lsnrctl->tnslsnr
далее lsnrctl завершается -> завершается su, tnslsnr - остаётся
init видит, что su завершился и пытается заново его запустить (моментально, даже несмотря на то, что tnslsnr еще работает)
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: inittab respawn

Сообщение nesk »

desserg писал(а):
09.07.2009 10:33
#!/bin/sh

/bin/su - oracle -c "/u01/app/oracle/product/10.2.0/db_2/bin/lsnrctl start"
while [ -n "$(ps -fu oracle|ps -fu oracle|grep -v grep|grep tns)" ]; do
sleep 5
done


а можно вообще вот так:

Код: Выделить всё

#!/bin/sh

while true; do
while [ -n "$(ps -fu oracle|grep tns|grep -v grep)" ]; do
sleep 5
done
/bin/su - oracle -c "/u01/app/oracle/product/10.2.0/db_2/bin/lsnrctl start"
 done
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали: