Перезапуск демона Linux

У меня есть Linux-демон, который я написал на C ++, который должен перезапускаться, когда ему передается команда «restart» от пользователя через сеть через его консоль. Это возможно? Я использую /etc/init.d скрипт. Как я могу запрограммировать его на перезагрузку? Должен ли я запустить новый процесс с очень большой задержкой (одна минута), который затем снова запускает сценарий оболочки? Проблема в том, что демону может потребоваться очень много времени для закрытия, а в худшем случае — даже больше минуты.

1

Решение

Существует три основных способа перезапуска приложения:

  1. Когда приложение получает запрос на перезапуск, оно выполняет надлежащую очистку, освобождает все выделенные ресурсы и затем повторно инициализирует, как если бы оно было запущено с нуля.

  2. Создайте новый процесс, где новый дочерний процесс исполняется сам, а родительский процесс завершается нормально.

  3. Демон — это просто приложение-обертка, очень похожее на init-скрипт. Он создает новый процесс, который запускает реальное приложение, в то время как родительский процесс просто ожидает его выхода. Если дочерний процесс (и реальное приложение) возвращается со специальным кодом выхода, это означает, что он должен быть перезапущен, чтобы разметки снова выполнялись.

Обратите внимание, что пункты 2 и 3 в основном совпадают.

1

Другие решения

Разбейте перезапуск на два шага, остановитесь и начните. если вашей программе требуется время для остановки, это должно быть обработано в функции остановки, я не могу комментировать детали, так как я не знаю ваш сценарий использования, но я бы вообразил, что мониторинг процесса для проверки его завершения будет изящным способ остановиться

1

Сделайте все, что вам нужно для завершения работы / очистки, а затем вызовите это:

execl( argv[0], argv, reinterpret_cast< char* >( 0 ) );

Точно так же, как fork () и exec (), но пропуская вилку. Exec заменит текущий процесс новой копией самого себя. ср http://linux.die.net/man/3/exec

1

Ваш скрипт инициализации должен просто убить вашего демона и запустить его снова. Не пытайтесь перезапустить своего демона С вашего демона.

0
По вопросам рекламы [email protected]