inittab respawn (Частота проверки inittab respawn)
Модераторы: SLEDopit, Модераторы разделов
-
desserg
- Сообщения: 12
- ОС: Linux
inittab respawn
Как/где можно изменить частоту проверки списка процессов в /etc/inittab, зарегистрированных для рестарта?
Тесты показывают около 5 минут, хотелось бы минуту.
В манах конкретики нет.
Тесты показывают около 5 минут, хотелось бы минуту.
В манах конкретики нет.
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: inittab respawn
Хм. вообще он мгновенно должен перезапускать.
Как только процесс падает, init об этом узнает, пытается его перезапустить несколько раз. Если несколько раз подряд терпит неудачу, то действительно откладывает это безобразие на пять минут.
Вы хотите уменьшить этот интервал?
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
desserg
- Сообщения: 12
- ОС: Linux
Re: inittab respawn
Перезапускаемый процесс - мой собственный тестовый, никаких проблем при перезапуске не имеет.
Длительность запуска менее секунды.
Да, хочу уменьшить до минуты.
Длительность запуска менее секунды.
Да, хочу уменьшить до минуты.
nesk писал(а): ↑08.07.2009 16:48
Хм. вообще он мгновенно должен перезапускать.
Как только процесс падает, init об этом узнает, пытается его перезапустить несколько раз. Если несколько раз подряд терпит неудачу, то действительно откладывает это безобразие на пять минут.
Вы хотите уменьшить этот интервал?
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: inittab respawn
а сколько времени Ваша тестовая программа работает? тоже меньше секунды?
Она журнал ведет? сколько раз init её запускает перед тем как сказать дизайбл на пять минут. (мне просто интересно)
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
desserg
- Сообщения: 12
- ОС: Linux
Re: inittab respawn
Она не работает, она слушает, это листенер, т.е. висит вечно.
Собственный лог и /var/log/messages попыток рестарта не показывают,
просто примерно через 5 минут программа честно перестартовывается как и положено.
Проблема в интервале.
Собственный лог и /var/log/messages попыток рестарта не показывают,
просто примерно через 5 минут программа честно перестартовывается как и положено.
Проблема в интервале.
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: inittab respawn
можете провести эксперимент
crtl+alt+f1
# echo 'e9:2345:respawn:/bin/echo test >/dev/tty1' >> /etc/inittab
# init q
Что произойдет?
crtl+alt+f1
# echo 'e9:2345:respawn:/bin/echo test >/dev/tty1' >> /etc/inittab
# init q
Что произойдет?
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
desserg
- Сообщения: 12
- ОС: Linux
Re: inittab respawn
Вот иниттаб:
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
Что, процесс обязан стартовать очень быстро?
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
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: inittab respawn
странно, если Вы переключились на первую консоль (ctrl+alt+f1), то она обычно связана с /dev/tty1
и Вы должны были бы наблюдать несколько сообщений test
Нет, но процесс обязан не отваливаться очень быстро. То есть слишком часто не падать, что бы его не надо было слишком часто перезапускать.
Таймаут на который init отрубает перезапуск процесса, определяется в коде программы (переменная SLEEPTIME в init.h). То есть без перекомпиляции init Вы его не поменяете. Да и это не требуется. Надо разбираться не с init, а с Вашей тестовой программой.
Еще раз повторю, init узнает о смерти порожденной программы практически мгновенно и так же мгновенно без таймаутов пытается её перезапустить.
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
desserg
- Сообщения: 12
- ОС: Linux
Re: inittab respawn
А что может являться причиной этого сообщения?
Выглядит это так, что init пытается стартовать программу, а она реагирует недостаточно быстро, и он пытается стартовать ее еще раз.
А после этого срабатывает триггер на частоту перезапуска.
Листенер - по определению достаточно легковесная программаБ и стартует быстрее одной секунды ...
Выглядит это так, что init пытается стартовать программу, а она реагирует недостаточно быстро, и он пытается стартовать ее еще раз.
А после этого срабатывает триггер на частоту перезапуска.
Листенер - по определению достаточно легковесная программаБ и стартует быстрее одной секунды ...
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: inittab respawn
Нет. Не так.
init стартует программу, программа завершается, init стартует программу снова, программа завершается, init стартует программу снова, программа завершается, init стартует программу снова, программа завершается, init стартует программу снова, программа завершается, init стартует программу снова, программа завершается, init стартует программу снова.... init'у надоедает эта чехарда и он кладет откладывает очередной перезапуск программы на пять минут. (такая дисквалификация, как в пятиминутный штраф в хоккее)
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
desserg
- Сообщения: 12
- ОС: Linux
Re: inittab respawn
Возможно, но попытка скопировать строчку из inittab в командную строку приводит к успешному старту программы,
без малейших проблем.
без малейших проблем.
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: inittab respawn
init стартует программу А. Программа A стартует программу B и завершается. init видит, что программа А завершилась и решает её перезапустить. ..... и так далее
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
desserg
- Сообщения: 12
- ОС: Linux
Re: inittab respawn
Да, но во второй раз - через 5 минут тот-же init стартует программу, и всегда успешно.
Что, в первый и во второй раз используются разные методы старта?
Что, в первый и во второй раз используются разные методы старта?
-
desserg
- Сообщения: 12
- ОС: Linux
Re: inittab respawn
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 ~]#
Результат первой честно пишется во внутренний лог листенера, а результат второй (неуспешной естественно) - в лог 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
Кстати, после принудительной реинициализации
init q
старт тоже проходит нормально - мгновенно ...
init q
старт тоже проходит нормально - мгновенно ...
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: inittab respawn
так Вы увидите только последний запуск.
надо так:
>> /tmp/ora 2>> /tmp/ora
один знак > опустошает файл каждый раз
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
desserg
- Сообщения: 12
- ОС: Linux
Re: inittab respawn
Ну в общем как говорят психиатры - что за болезнь - не знаю, но лечить умею.
Вот такой скрипт помог вылечить паузу в 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
Вот такой скрипт помог вылечить паузу в 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
если бы Вы воспользовались бы поиском, то нашли вот это:
Автоматический перезапуск программы
Автоматический перезапуск процесса
* cкрипт обнаружения зависания\падучести с автоперезапуском (+)
Скрипт перезапуска приложения при падении и завершении работы
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
desserg
- Сообщения: 12
- ОС: Linux
Re: inittab respawn
Найденное лекарство никак не объясняет артефакт поведения инита.
Причина попытки повторного старта программы неясна ;-(
Причина попытки повторного старта программы неясна ;-(
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: inittab respawn
я же писал уже:
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 не блокирует его перезапуск, и всегда готов его перезапустить моментально.
Так понятно?
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
desserg
- Сообщения: 12
- ОС: Linux
Re: inittab respawn
Второй раз все стартует нормально (через 5 минут), вот в чем вопрос.
Видимо есть какая-то скрытая логика срабатывания триггера в первый раз и во второй.
Кажущаяся проблема в том, что файл lsnrctl порождает процесс tnslsnr, что есто одно и тоже.
Видимо есть какая-то скрытая логика срабатывания триггера в первый раз и во второй.
Кажущаяся проблема в том, что файл lsnrctl порождает процесс tnslsnr, что есто одно и тоже.
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: inittab respawn
Нет, не так.
1) Старт. 2) тут же моментально несколько фальстартов (которые Вы не видите, но они есть) 3) блокировка на пять (штраф за фальстарт)
Через пять минут, даже если Ваша основная программа не завершилась повторяются фальстарты и блокировка.
А далее если программа завершилась, то она будет запущена максимум через пять минут, когда будет снята блокировка.
То есть в Вашей первой реализации init пытался перезапустить программу каждые пять минут независимо от того, завершилась ли она или нет.
Кажущаяся ?
Реальная.
lsnrctl - стартовый скрипт
tnslsnr - основная программа.
- Это две разные программы (два разных файла) и (что важнее) два разных процесса.
иерархия процессов будет такова:
init->su->lsnrctl->tnslsnr
далее lsnrctl завершается -> завершается su, tnslsnr - остаётся
init видит, что su завершился и пытается заново его запустить (моментально, даже несмотря на то, что tnslsnr еще работает)
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: inittab respawn
а можно вообще вот так:
Код: Выделить всё
#!/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
0xDEFEC8ED