Сервисная остановка является синхронной или асинхронной?

Если Вы действительно хотите соединить eth0 мостом со своими kvm гостями, необходимо только настроить материал через мост, например:

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
    address 188.165.X.Y
    netmask 255.255.255.0
    network 188.165.255.0
    broadcast 188.165.255.255
    gateway 188.165.255.254
    bridge_ports eth0
    bridge_fd 9
    bridge_hello 2
    bridge_maxage 12
    bridge_stp off

Если бы Вы не хотите соединять мостом, но просто создавать маршрутизатор (это зависит от Вашей настройки сети), необходимо было бы создать мост без любых портов в Вашем /etc/network/interface и создайте соответствующие записи маршрутизации. libvirt может создать корректный мост, но мост должен будет иметь дополнительный IP.

3
04.09.2013, 15:43
2 ответа

Это зависит того, как Ваш сервис останавливается. Только Вы знает: сервис запускается и останавливается, методы являются вещами, которые необходимо зарегистрировать для пользователей сервиса, и идеально обеспечивать.

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

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

Если Ваш сервис останавливается через a stop директива в Новомодном сервисном описании, Выскочка отправляет сигнал в процесс. Выскочки затем ожидают в течение нескольких секунд процесса для остановки. Поскольку Выскочка является родителем процесса, он получает уведомление от ядра (сигнал SIGCLD), когда процесс выходит. Это только работает хорошо, когда процесс не разветвляется для помещения себя в фоновом режиме; Новомодные сервисные описания обычно звонят демонам с опцией, говоря им не разветвиться (например. ssh -D).

Усовершенствованные сервисы имеют команду регулировки. Когда Вы называете команду регулировки, они прекращают принимать новые соединения. Когда все незаконченные соединения закрываются, сервис отправляет положительный ответ на команду регулировки и затем выходит. Способ связи обычно является сокетом IP или Unix.

0
27.01.2020, 21:23
  • 1
    "Выскочки затем ожидает в течение нескольких секунд процесса для остановки". Я не уверен, что это верно. Мой опыт состоит в том что stop управляйте сразу возвращается. Можно протестировать это с чем-то как stop <name>; ps -efww | grep <name>. Вы будете часто видеть, что услуга все еще работает. –  Mike Conigliaro 15.02.2014, 01:12
  • 2
    @MikeConigliaro проблемы я думаю, Выскочка ожидает процесса предка, но не обнаруживает дочерние процессы, которые все еще работают (и не может, действительно, не достаточно надежно для не порождения сопутствующего ущерба, такого как уничтожение сессий SSH при перезапуске сервера). –  Gilles 'SO- stop being evil' 16.02.2014, 00:40

Удостоверьтесь что Ваше приложение

  1. регистрирует его надлежащее завершение работы к системному журналу, посмотрите man 3 syslog для деталей
  2. дескрипторы SIGTERM путем записи всего этому нужно к базе данных, закрывая соединение и exitлуг; посмотрите man 2 sigaction для детали
  3. имеет рабочий обработчик остановок в/etc/init.d; посмотрите man init и man stopping

и затем Вы не должны будете предполагать о том, останавливается ли Ваше приложение правильно, Вы будете знать.

3
27.01.2020, 21:23

Теги

Похожие вопросы