В Windows вы можете установить, что должно происходить, если / когда происходит сбой службы. Есть ли стандартный способ добиться того же в Linux (в частности, CentOS)?
Большая часть моего вопроса: как вы обрабатываете сокеты, которые остались открытыми - например, в состояниях TIME_WAIT, FIN_WAIT1 и т. Д.
В настоящий момент, если служба, которую я разрабатываю, дает сбой, мне нужно подождать, пока сокеты очистят или изменить порт прослушивания, прежде чем я смогу вручную перезапустить его.
Спасибо за вашу помощь.
Только отвечая на сервис перезапустите часть. Я также сталкивался с Monit, но на CentOS 7 systemd обо всем позаботится за вас. Вам просто нужно добавить эти две строки в файл .service (если их там уже нет):
См. Https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ для справки.
Если вы хотите создать собственный сервис systemd, написать собственный файл сервиса довольно просто. Смотрите пример ниже, для пользовательского http-сервера.
Запустите редактор с новым служебным файлом:
И добавьте следующий контент, который вы можете редактировать по мере необходимости:
Я хочу, чтобы он запускался автоматически при загрузке:
Расскажите systemd об изменениях и запустите сервис:
И теперь вы можете увидеть статус:
Для справки см. Https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/
источник
systemd
стандартный менеджер сервисов в большинстве популярных дистрибутивов может сделать это за вас.Вы можете вызвать
setsockopt(2)
сокет прослушивания с помощьюSO_REUSEADDR
, чтобы вы моглиbind(2)
снова подключиться к нему, не дожидаясь истечения срока действия всех соединений. Другая возможность: сбросить соединения из ядра. У FreeBSD естьtcpdrop
команда для этого, я не знаю о Linux.источник
Если ваш дистрибутив Linux использует Upstart вместо SysV init, это
respawn
делает ключевое слово.http://upstart.ubuntu.com/cookbook/#respawn
источник