Czy mogę zrestartować systemd bez restartu?


39

Próbuję ponownie uruchomić usługi po yum updateRHEL 7.4. Mógłbym zrestartować każdą usługę za pomocą systemctl, ale needs-restartingod yum utilsmówi mi, że powinienem zrestartować również systemd:

# needs-restarting
1 : /usr/lib/systemd/systemd --system --deserialize 21

Czy mogę zrestartować systemdkomputer bez ponownego uruchamiania serwera i jak?

Znalazłem kilka wzmianek systemctl daemon-reload, ale to nie powoduje, że znikają one z listy potrzebnych do ponownego uruchomienia.

Odpowiedzi:


43

Aby zrestartować demona, uruchom

systemctl daemon-reexec

Jest to udokumentowane na stronie systemctlpodręcznika :

Ponownie uruchom menedżera systemowego. Spowoduje to serializację stanu menedżera, ponowne wykonanie procesu i deserializację stanu ponownie. To polecenie jest mało przydatne, z wyjątkiem debugowania i aktualizacji pakietów. Czasami może być pomocny jako ciężki daemon-reload. Podczas ponownego uruchamiania demona wszystkie gniazda systemowe nasłuchujące w imieniu konfiguracji użytkownika pozostaną dostępne.

Niestety needs-restartingnie można ustalić, systemdczy rzeczywiście się zrestartował. systemd execssam się zrestartuje, co nie resetuje czasu rozpoczęcia procesu; ale needs-restartingporównuje czas modyfikacji pliku wykonywalnego z czasem rozpoczęcia procesu, aby ustalić, czy proces musi zostać zrestartowany (między innymi), w wyniku czego zawsze uważa, że systemdnależy go zrestartować ... Aby ustalić, czy systemdnaprawdę należy zrestartować, możesz sprawdzić dane wyjściowe lsof -p1 | grep deleted: systemdkorzysta z biblioteki, libsystemd-sharedktóra jest dostarczana w tym samym pakiecie, a zatem jest aktualizowana wraz z demonem, więc jeśli systemdtrzeba ją zrestartować, zobaczysz ją przy użyciu usuniętej wersji biblioteki. Jeśli lsofnie pokazuje usuniętych plików, systemdnie trzeba go ponownie uruchamiać. (DziękiJeff Schaller za podpowiedź!)


1
@Raman, daemon-reexecma działać nawet z systemdpid 1.
Stephen Kitt

3
Sedno potrzeby ponownego uruchamiania sprowadza się do github.com/rpm-software-management/yum/blob/master/…, gdzie odpytuje on „czas_początkowy” PID; jeśli demon-reexec tego nie zaktualizuje, restartowanie potrzeb pozostanie „zdezorientowane”.
Jeff Schaller

1
Nie zakładaj, że każda zaangażowana ścieżka kodowa jest dobrze przetestowana, szczególnie w systemach innych niż RedHat. Technicznie możliwe jest uruchomienie daemon-reexec, ale bezpieczniej jest zrestartować komputer.
Harald

2
@Harald jest używany za każdym razem, gdy ktoś aktualizuje systemdDebiana i jego pochodne, więc jest dobrze przetestowany. Jest to również dość proste (poszukaj do_reexecute).
Stephen Kitt

1
@StephenKitt - Gdy próbuję uruchomić, lsof -p1 | grep deletedgenerowane są następujące dane wyjściowe lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete. Podczas czytania ( unix.stackexchange.com/questions/171519/... ) wydaje się, że nawet root nie może uzyskać do niego dostępu. Jaka byłaby alternatywa lsof -p1 | grep deleted?
Zmotywowany

2

W moim przypadku właśnie zaktualizowałem systemdi każde systemctlpolecenie nie działa:

# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied

Jednak według strony initpodręcznika możesz zrobić to samo, wysyłając SIGTERMdo demona działającego jako PID 1, który działał:

kill -TERM 1

To przeładowało demona, po czym wszystkie systemctlpolecenia znów zaczęły działać.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.