Qual è la differenza tra "riavvio del servizio" e "ricarica del servizio"


74

Sto cercando di capire la differenza tra service restart [someservice]e service reload [someservice]. Comprendo che "restart" riavvia il servizio mentre "ricaricare" ricarica la configurazione, ma non capisco le implicazioni pratiche di questo abbastanza bene da determinare quale dovrei usare in un determinato contesto.

Un esempio: la maggior parte delle guide che ho letto per configurare PostgreSQL afferma che, dopo aver modificato postgresql.conf e pg_hba.conf per consentire le connessioni remote, dovrei rilasciare sudo service postgresql restart. Tuttavia, se avessi indovinato quale utilizzare in base alla descrizione sopra, sceglierei "ricaricare".

Nel caso in cui sia importante, sono su Ubuntu 11.10, anche se spero in una spiegazione il più possibile applicabile.


2
Un paio di anni fa, gestivo un server con diverse migliaia di utenti. riavviare Apache non è stato veloce per qualsiasi motivo, ci sarebbero voluti circa 3 minuti per riavviare apache (motivi). Ad ogni modo, se il server fosse spento per 3 minuti il ​​mio capo avrebbe ricevuto circa 800 telefonate. Con il servizio ricaricato, 0 telefonate. Questa è la differenza.
j0h

Risposte:


41

Quello che hai detto è corretto, reloaddice al servizio di ricaricare i suoi file di configurazione. Ciò significa che dovrebbe essere sufficiente ricaricare la configurazione; tuttavia potrebbero esserci alcuni servizi che "non seguono la regola" o che non ricaricano i file di configurazione. Per questo motivo probabilmente sei più sicuro restart. Personalmente non uso postgresql, quindi non lo so.


1
Nel frattempo, c'èreload-or-restart
Suuuehgi, il

Per PostgreSQL, è possibile applicare le modifiche a /etc/postgresql/version/main/postgresql.conf con un ricaricamento. L'applicazione delle modifiche a pg_hba.conf richiede un riavvio.
Aidan Melen,

63
  • restart = stop + start
  • reload = resta in esecuzione + rileggi i file di configurazione.

8

Non tutti i servizi supportano reload. Per quelli che lo fanno, di solito è preferibile riavviare (ovvero ricaricare causa tempi di fermo inferiori o nulli).

Il Manuale delle politiche di Debian specifica che ogni /etc/init.d/script dovrebbe supportare force-reloadun'azione, il che significa reloadse il servizio lo supporta e restartse il servizio non supporta il ricaricamento.

Non sono sicuro di come ciò si traduca nel moderno mondo upstart di Ubuntu.


1
Il Manuale delle politiche di Debian era un collegamento davvero utile, grazie.
Non una patch il

1
la maggior parte supporta il ricaricamento, se non attraverso il servizio di sistema, pensato /etc/init.d/SomeProgram ricaricamento
j0h

4

Per espandere la risposta di عبد النور التومي con la mia esperienza con systemd.

In systemd ogni volta che un processo viene avviato viene eseguito nel contesto di systemd, l'esempio più chiaro di ciò è con le variabili di ambiente definite nel suo file di unità.

Pertanto, quando si invia un systemctl reload [someservice]segnale, questo invia un segnale al servizio per ricaricarsi con grazia se è supportato. In caso contrario, il processo ignorerà semplicemente il segnale. Questo è configurabile però.

Cosa intendo con grazia? per avviare nuovi lavoratori con la nuova configurazione o codice e interrompere i vecchi lavoratori quando completano l'eventuale richiesta corrente.

E se lo fai systemctl restart [someservice]dirai a systemctl di dire al servizio di fermarsi, distruggere l'attuale contesto systemd, crearne uno nuovo ed eseguire nuovamente il servizio. Ciò ha senso, ad esempio, ricaricare le variabili di ambiente in un contesto di sistema o se un ricaricamento non è supportato.

Spero che questo chiarisca un po 'e se mi sbaglio in qualcosa per favore fatemelo sapere.


0

attualmente se un servizio deve essere avviato (ad esempio un file di configurazione modificato) è possibile avvisare il servizio, ma questo porta a un riavvio. Sarebbe bello se fosse stato effettuato un ricaricamento se il servizio era già in esecuzione (anche se suppongo che ci siano sicuramente alcuni servizi che richiedono il riavvio di alcuni file, ricaricamenti per altri).

L'esempio più complesso che mi viene in mente è qualcosa come Apache. Normalmente puoi semplicemente chiederlo di ricaricare, tuttavia a volte devi invece richiedere un riavvio (se aggiungi / rimuovi moduli per esempio).


0

postgres è un buon esempio di grandi differenze tra ricaricare e riavviare, perché in seguito deve disconnettere tutti i client di database.

quando le connessioni non devono eseguire il rollback, è possibile interrompere il servizio senza "--force" all'inizio utilizzando pg_ctlcluster .

in /etc/postgres/{version}/{dbname}/postgresql.conf e su http://www.postgresql.org/docs/manuals/ ogni parametro ha un'osservazione come "Questo parametro può essere impostato solo all'avvio del server. "

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.