W systemie Windows możesz ustawić, co powinno się stać, jeśli / kiedy usługa ulegnie awarii. Czy istnieje standardowy sposób osiągnięcia tego samego w systemie Linux (w szczególności CentOS)?
Większa część mojego pytania brzmi: jak radzić sobie z gniazdami, które pozostały otwarte - na przykład w stanach TIME_WAIT, FIN_WAIT1 itd.
W chwili, gdy usługa, którą rozwijam, ulega awarii, muszę poczekać, aż gniazda wyczyszczą się lub zmienią port nasłuchiwania, zanim będę mógł go ponownie uruchomić ręcznie.
Dzięki za pomoc.
Tylko odpowiedź na część dotyczącą ponownego uruchomienia usługi. Natknąłem się również na Monita, ale na CentOS 7 systemd dba o to wszystko za ciebie. Musisz tylko dodać te dwa wiersze do pliku .service (jeśli jeszcze ich tam nie ma):
Zobacz https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ w celach informacyjnych.
Jeśli chcesz utworzyć niestandardową usługę systemową, bardzo łatwo jest napisać własny plik usługi. Zobacz poniższy przykład niestandardowego serwera HTTP.
Uruchom edytor z nowym plikiem usługi:
I dodaj następującą treść, którą możesz edytować w razie potrzeby:
Chcę, aby uruchamiał się automatycznie podczas rozruchu:
Poinformuj systemd o zmianach i uruchom usługę:
A teraz możesz zobaczyć status:
W celach informacyjnych patrz https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/
źródło
systemd
standardowy menedżer usług w większości popularnych dystrybucji może to zrobić za Ciebie.Możesz wezwać
setsockopt(2)
gniazdo nasłuchiwania za pomocąSO_REUSEADDR
, abyś mógł dobind(2)
niego ponownie, nie czekając na wygaśnięcie wszystkich połączeń. Inna możliwość: porzuć połączenia z jądra. FreeBSD matcpdrop
do tego polecenie, nie wiem o Linuksie.źródło
Jeśli twoja dystrybucja linuksowa używa Upstart zamiast SysV init,
respawn
słowo kluczowe to robi.http://upstart.ubuntu.com/cookbook/#respawn
źródło