Was ist der Unterschied zwischen "Service Restart" und "Service Reload"?

74

Ich versuche den Unterschied zwischen service restart [someservice]und zu verstehen service reload [someservice]. Ich verstehe, dass "restart" den Dienst neu startet, während "reload" die Konfiguration neu lädt, aber ich verstehe die praktischen Auswirkungen davon nicht gut genug, um zu bestimmen, welche ich in einem bestimmten Kontext verwenden soll.

Ein Beispiel: Die meisten Anleitungen, die ich zum Einrichten von PostgreSQL gelesen habe, besagen, dass ich nach dem Bearbeiten von postgresql.conf und pg_hba.conf, um Remoteverbindungen zuzulassen, Folgendes ausgeben sollte sudo service postgresql restart. Wenn ich jedoch aufgrund der obigen Beschreibung raten würde, welche ich verwenden soll, würde ich "reload" wählen.

Falls es darauf ankommt, bin ich auf Ubuntu 11.10 - obwohl ich auf eine möglichst allgemein gültige Erklärung hoffe.

nxzr
quelle
2
Vor ein paar Jahren betrieb ich einen Server mit mehreren tausend Benutzern. Apache neu zu starten war aus irgendeinem Grund nicht schnell, es würde ungefähr 3 Minuten dauern, um Apache neu zu starten (Gründe). Wie auch immer, wenn der Server 3 Minuten lang nicht erreichbar wäre, würde mein Chef ungefähr 800 Anrufe erhalten. Mit Service Reload 0 Anrufe. Das ist der Unterschied.
07.01.16 Uhr

Antworten:

41

Was Sie gesagt haben, ist korrekt und reloadweist den Dienst an, die Konfigurationsdateien neu zu laden. Das heißt, es sollte ausreichen, die Konfiguration neu zu laden. Es kann jedoch bestimmte Dienste geben, die "der Regel nicht folgen" oder die Konfigurationsdateien nicht neu laden. Aus diesem Grund sind Sie wahrscheinlich sicherer restart. Ich persönlich benutze es nicht postgresql, also weiß ich es nicht.

jman6495
quelle
1
Inzwischen gibt esreload-or-restart
Suuuehgi
Für PostgreSQL können Sie Änderungen an der /etc/postgresql/version/main/postgresql.conf mit einem Reload vornehmen. Das Anwenden von Änderungen an pg_hba.conf erfordert einen Neustart.
Aidan Melen
63
  • Neustart = Stop + Start
  • reload = lauffähig bleiben + Konfigurationsdateien erneut lesen.
Abdennour TOUMI
quelle
8

Nicht alle Dienste werden unterstützt reload. Für diejenigen, die dies tun, ist es normalerweise vorzuziehen, neu zu starten (dh das Neuladen verursacht weniger oder keine Ausfallzeiten).

Das Debian-Richtlinienhandbuch legt fest, dass jedes /etc/init.d/Skript eine force-reloadAktion unterstützen soll, dh, reloadob der Dienst dies unterstützt und restartob der Dienst das Neuladen nicht unterstützt.

Ich bin nicht sicher, wie sich das auf die moderne Ubuntu-Emporkömmlingswelt auswirkt.

Marius Gedminas
quelle
1
Das Debian-Richtlinienhandbuch war ein wirklich nützlicher Link, danke.
Patch
1
die meisten Unterstützung Reload, wenn nicht durch den Systemdienst, dachte /etc/init.d/SomeProgram reload
J0H
4

Um عبد النور التومي zu erweitern, antworten Sie mit meiner Erfahrung mit systemd.

In systemd wird ein Prozess immer dann gestartet, wenn er im Kontext systemd ausgeführt wird. Das deutlichste Beispiel hierfür sind die Umgebungsvariablen, die in der Unit-Datei definiert sind.

Wenn Sie also ein systemctl reload [someservice]Signal senden , sendet es ein Signal an den Dienst, um sich ordnungsgemäß neu zu laden, wenn dies unterstützt wird. Wenn nicht, ignoriert der Prozess das Signal einfach. Dies ist jedoch konfigurierbar.

Was meine ich mit anmutig? um neue Worker mit der neuen Konfiguration oder dem neuen Code zu starten und die alten Worker anzuhalten, wenn sie die aktuellen Anforderungen nicht mehr bedienen, sofern vorhanden.

Und wenn Sie es schaffen systemctl restart [someservice], wird systemctl angewiesen, den Dienst anzuhalten, den aktuellen systemd-Kontext zu zerstören, einen neuen zu erstellen und den Dienst erneut auszuführen. Dies ist beispielsweise sinnvoll, um Umgebungsvariablen in einem systemd-Kontext neu zu laden, oder wenn ein erneutes Laden nicht unterstützt wird.

Hoffe das klärt ein wenig und wenn ich mich in etwas irre lass es mich bitte wissen.

Gaston Sanchez
quelle
0

Derzeit können Sie den Dienst benachrichtigen, wenn ein Dienst gekickt werden muss (z. B. eine Konfigurationsdatei wurde geändert). Dies führt jedoch zu einem Neustart. Es wäre schön, wenn ein Neuladen durchgeführt würde, wenn der Dienst bereits ausgeführt würde (obwohl es vermutlich einige Dienste geben wird, die für einige Dateien einen Neustart erfordern, für andere ein Neuladen).

Das komplexeste Beispiel, an das ich denken kann, ist so etwas wie Apache. Normalerweise können Sie es nur zum erneuten Laden auffordern. Manchmal müssen Sie jedoch stattdessen einen Neustart anfordern (wenn Sie beispielsweise Module hinzufügen oder entfernen).

Eine Null
quelle
0

postgres ist ein gutes Beispiel für große Unterschiede zwischen reload und restart, da letztere alle Datenbank-Clients trennen müssen.

Wenn die Verbindungen nicht zurückgesetzt werden sollen, können Sie den Dienst zunächst mit pg_ctlcluster ohne "--force" beenden .

In /etc/postgres/{version}/{dbname}/postgresql.conf und unter http://www.postgresql.org/docs/manuals/ hat jeder Parameter eine Bemerkung wie "Dieser Parameter kann nur beim Serverstart gesetzt werden. "

Maletin
quelle