LINUX.ORG.RU
ФорумAdmin

Ожидание готовности сети при старте Демона

 , ,


1

1

Уповаю на Вашу помощь, уважаемые гуру!

Помогите грамотно настроить старт демона с ожиданием инициализации сети. Может быть ему как-то можно прописать зависимости или сделать его старт в фоновом режиме ... пусть тогда себе спокойно спит 30 ctreyl пока сеть поднимется, а система при этом будет уже в состоянии готовности.

Подробности: Есть демон (MediaTomb), который запускается последним, перед запросом логина и пароля. Проблема в том, что ему для нормального старта требуется не просто наличие соединения, но и наличие IP адреса, инициализация и назначение IP адреса роутером занимает некоторое время. В результате демон благополучно рапортует об ошибке и не стартует. Если войти пользователем и запустить его вручную, то он работает и не капризничает. Более того раскопал скрипт инициализации демона в \etc\init.d\mediatomb и добавив в него простой «sleep 30» получил благополучно стартующий демон ... но это костыль, который к тому же делает загрузку компьютера существенно более долгой (вся система стартует за сопоставимое время а потом просто столько же времени тупо стоит иждет демона). Попробовал другой подход, написал скрипт который циклично запускает ifconfig и если в нем присутствует нужный IP, то переходит к инициализации демона иначе включает «sleep 1» и снова проверка ... но тут меня подстерегала засада, прописывать в скрипте фиксированный IP неправильно а при помощи grep проверить имя интерфейся и наличие IP по маске не получается - они на разных строчках, а grep оперирует только одной строкой (во всяком случае мне его не удалось заставить искать регулярное выражение включающее перевод строки)

Подозреваю, что должно быть более изящный способ решения данного вопроса.

Увы сам демон не в состоянии запуститься и ожидать готовности сети (во всяком случае мне не удалось найти соответствующих настроек).

P.S. Поиск пользовал, но видимо искал не то или не там. Если ответ очевиден, то просто подскажите что искать, правильный термин или что-то, что более менее точно выведет на решение.


Ответ на: комментарий от Tanatos

Забавно. Получилось, что кто-то опускает интерфейс, но потом снова поднимает. Ведь не NetworkManager же?

Попробуйте заставить init-скрипт писать в syslog при помощи logger. Так можно будет отследить время его работы.

AITap ★★★★★
()
Ответ на: комментарий от AITap

Сейчас попробую. В файле dmesg нашел любопытные записи:

[10.692431] r8169 0000:03:00.0: eth0: link down

[10.692460] r8169 0000:03:00.0: eth0: link down

[10.692817] ADDRCONF(NETDEV_UP): eth0: link is not ready

Tanatos
() автор топика
Ответ на: комментарий от AITap

Прошу прощения, а можно поподробней про logger ... кажестя я как-то не так его заюзал, система подвисла при загрузке, буду вырезать теперь

Tanatos
() автор топика
Ответ на: комментарий от AITap

Все, разобрался. Судя по записям демон стартует в процессе инициализации соединения. В логе присутствует запись о начале обмена данными с dhcp, затем запись, что стартует демон, затем через пару секунд ответ от DHCP с назначением адресов.

Tanatos
() автор топика
Ответ на: комментарий от AITap

Покапался в каталогах и еще нашел следующие ссылки на скрипт инициализации:

/etc/rc0.d/K01mediatomb

/etc/rc1.d/K01mediatomb

/etc/rc2.d/S04mediatomb

/etc/rc3.d/S04mediatomb

/etc/rc4.d/S04mediatomb

/etc/rc5.d/S04mediatomb

/etc/rc6.d/K01mediatomb

Если мне память не изменяет это типы инициализации системы и стартует только один из .... или все таки какой-то из этих скриптов стартует раньше?

Tanatos
() автор топика
Ответ на: комментарий от Tanatos

default runlevel по умолчанию в Debian равен 2. На нём четвёртым по порядку запускается mediatomb, как и на 3..5. На 0 (выключение), 1 (single-user mode) и 6 (перезагрузка) mediatomb первым останавливается.

Это очень странно, что mediatomb запускается параллельно с networking, от которого зависит. Или...
Попробуйте:
# Should-Start: $network
И снова запустить insserv.

AITap ★★★★★
()
Ответ на: комментарий от AITap

там вообще было прописано «$all». Попробовал как вы сказали, ничего не поменялось. Вернул обратно. Судя по тому, что менялось S04... -> S01... -> S04... при последних изменениях зависимости обрабатываются ... но как-то криво. Самое интересное, что система то чистая. Только MediaTomb и поставил ... да еще pure-ftpd, но он точно непричем, т.к. до него все было тоже самое. попробую еще паралельно на виртуалке тоже самое поднять

Tanatos
() автор топика
Ответ на: комментарий от AITap

На виртуалке с чистой системой ровно тоже самое с точностью до долей секунд.

Tanatos
() автор топика
Ответ на: комментарий от Tanatos

Мне кажется, это повод отправить багрепорт. Система не должна запускать init-скрипты следующего уровня, пока не достигнут предыдущий. init-скрипт сети не должен завершаться, пока интерфейсы не подняты. Благо, проблема легко воспроизводится.

В качестве временного решения могу предложить # X-Interactive: true для networking и mediatomb (чтобы они не выполнялись параллельно; может не сработать), или даже вовсе отключить параллелизм (touch /etc/init.d/.legacy-bootordering).

AITap ★★★★★
()
Ответ на: комментарий от AITap

Пока в качестве решения можно и sleep попользовать ... благо судя по нашим с Вами разбирательствам ему должно хватить и 10 секунд.

Спасибо за помощь и оперативный отклик! Пополнил багаж знаний. Буду писать рапорт.

Tanatos
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.