У меня есть определенный сервис (в данном случае OpenFire), который запускается при запуске. При запуске он пытается подключиться к базе данных по заданному имени хоста. Во время запуска он не может подключиться к этой базе данных, поскольку не может найти хост в DNS.
Мое лучшее предположение заключается в том, что эта служба выполняется при запуске до инициализации сети и получения DNS-серверов от DHCP. Есть ли способ указать зависимости службы запуска, которые должны быть выполнены перед выполнением сценария /etc/init.d/
?
Забудьте о выскочке. Есть гораздо более простые способы сделать это. Поместите скрипт, который запускает Openfire, здесь:
/etc/network/if-up.d/
Если openfire должен запускаться как ваш пользователь, то что-то вроде:
#!/bin/sh
su -c "openfire" myUserName
Убедитесь, что вы отметили его как исполняемый:
sudo chmod +x /etc/network/if-up.d/openfire
Аналогично, вы можете закрыть openfire, когда потеряете сетевое соединение, поместив скрипт в /etc/network/if-down.d/, который его убивает:
#!/bin/sh
killall openfire
Вы можете посмотреть в /etc/rc0.d сервис, он будет иметь S ## [имя], то есть - S35networking
Так что, если вы скажете S36openfire, он должен загрузиться сразу после подключения , Или сделайте число 99, и оно будет загружаться последним, давая сети время для своей работы.
Надеюсь, что тебе удастся.
Если вы не конфигурируете свою сеть с помощью NetworkManager, вы можете попытаться настроить свой upstart conf в зависимости от сети:
start on starting networking
или
start on starting network-interface
Я не знать, как он взаимодействует с NetworkingManager, возможно, NM вызывает некоторые события, которые можно обнаружить с помощью upstart.