Mam naprawdę dziwny problem systemd
. Kiedy wydam systemctl restart
, rozpocznie nowy proces przed zakończeniem poprzedniego.
Można to zobaczyć w dzienniku, w którym końcowy komunikat zamknięcia („dziennik zamknięcia”) jest rejestrowany po komunikacie startowym („dziennik otwarcia”).
Czy jest jakiś sposób na dodanie opóźnienia między zatrzymaniem a rozpoczęciem procesu?
systemctl stop myservice && sleep 3 && systemctl start myservice
Odpowiedzi:
W plikach usług systemowych możesz ustawić opcję RestartSec, aby dodać opóźnienie do ponownego uruchomienia. Zobacz przykład poniżej:
Sprawdź ten link, aby uzyskać więcej przykładów.
źródło
RestartSec
dotyczy tylko usług skonfigurowanych zgodnie zRestart=
dyrektywą i nie jest brany pod uwagę przy wykonywaniusystemctl restart someservice
RestartSec wydaje się być używany tylko wtedy, gdy ta konkretna usługa jest restartowana za pomocą komendy systemctl restart.
Na przykład mam dwie usługi, A i B.
i
Jeśli wykonasz restart systemctl B, zadziała zgodnie z oczekiwaniami ... ale jeśli wykonasz restart systemctl A, obie usługi zostaną zatrzymane i natychmiast ponownie uruchomione, bez opóźnienia.
Systemd najwyraźniej używa tylko wartości konfiguracyjnych dla jednej określonej usługi i ignoruje je dla jakichkolwiek zależności.
To nie jest tak rzadkie, jak się wydaje. Jeśli B rozmawia ze zdalnym serwerem, szybkie uruchamianie i zatrzymywanie może się nie powieść z powodu odrzucenia klienta przez zdalny koniec. Ale ponowne uruchomienie A nastąpi bezpośrednio, gdy A zostanie zaktualizowane bez zmiany na B.
Prawdopodobnie możesz obejść ten problem, dodając opóźnienie również do A, ale nie powinieneś tego POTRZEBOWAĆ, ponieważ przerywa izolację obiektu, informując A o B, gdy nie jest to zależność.
źródło