Posso riavviare systemd senza riavviare?


39

Sto cercando di riavviare i servizi dopo un yum updatesu RHEL 7.4. Potrei riavviare ogni servizio usando systemctl, ma needs-restartingda yum utilsmi dice che dovrei anche riavviare systemd stesso:

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

Posso riavviare systemdsenza riavviare il server e come?

Ho trovato alcune menzioni di systemctl daemon-reload, ma questo non lo fa scomparire dall'elenco di riavvio delle esigenze.

Risposte:


43

Per riavviare il demone, eseguire

systemctl daemon-reexec

Questo è documentato nella la systemctlpagina di manuale :

Eseguire nuovamente il gestore del sistema. Ciò serializzerà lo stato del gestore, eseguirà nuovamente il processo e deserializzerà nuovamente lo stato. Questo comando è di scarsa utilità ad eccezione del debug e degli aggiornamenti dei pacchetti. A volte, può essere utile come un peso pesante daemon-reload. Mentre il demone viene rieseguito, tutti i socket che ascolteranno per conto della configurazione dell'utente rimarranno accessibili.

Sfortunatamente needs-restartingnon è possibile determinare che systemdsia stato effettivamente riavviato. systemd execsriavvio automatico, che non ripristina l'ora di inizio del processo; ma needs-restartingconfronta il tempo di modifica dell'eseguibile con l'ora di inizio del processo per determinare se un processo deve essere riavviato (tra le altre cose) e, di conseguenza, considera sempre che systemddeve essere riavviato ... Per determinare se è systemddavvero necessario riavviare, puoi controllare l'output di lsof -p1 | grep deleted: systemdutilizza una libreria, libsystemd-sharedche viene spedita nello stesso pacchetto e viene quindi aggiornata insieme al demone, quindi se systemdhai bisogno di essere riavviata la vedrai usando una versione eliminata della libreria. Se lsofnon mostra alcun file eliminato, systemdnon è necessario riavviarlo. (Grazie aJeff Schaller per il suggerimento!)


1
@Raman, daemon-reexecdovrebbe funzionare anche systemdcome pid 1.
Stephen Kitt,

3
Il punto cruciale del riavvio delle esigenze si riduce a github.com/rpm-software-management/yum/blob/master/… dove si interroga "start_time" del PID; se il daemon-reexec non lo aggiorna, il riavvio delle necessità rimarrà "confuso".
Jeff Schaller

1
Non dare per scontato che qualsiasi codepath coinvolto sia ben testato, specialmente su sistemi non RedHat. È tecnicamente possibile eseguire daemon-reexec, ma è più sicuro riavviare.
Harald,

2
@Harald è usato ogni volta che qualcuno aggiorna systemdsu Debian e derivati, quindi è ben testato. È anche ragionevolmente semplice (cercare do_reexecute).
Stephen Kitt,

1
@StephenKitt - Quando provo a eseguire lsof -p1 | grep deletedil seguente output viene generato lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete. Nella lettura ( unix.stackexchange.com/questions/171519/… ), sembra che anche il root non sia in grado di accedervi. Quale sarebbe l'alternativa lsof -p1 | grep deleted?
Motivato il

3

Nel mio caso, mi ero appena aggiornato systemde qualsiasi systemctlcomando non andava a buon fine:

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

Tuttavia, secondo la initmanpage, puoi fare la stessa cosa inviando SIGTERMal demone in esecuzione come PID 1, che ha funzionato:

kill -TERM 1

Ciò ha ricaricato il demone, dopo di che tutti i systemctlcomandi hanno ripreso a funzionare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.