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.
quelle
Antworten:
Was Sie gesagt haben, ist korrekt und
reload
weist 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 sichererrestart
. Ich persönlich benutze es nichtpostgresql
, also weiß ich es nicht.quelle
reload-or-restart
quelle
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 eineforce-reload
Aktion unterstützen soll, dh,reload
ob der Dienst dies unterstützt undrestart
ob der Dienst das Neuladen nicht unterstützt.Ich bin nicht sicher, wie sich das auf die moderne Ubuntu-Emporkömmlingswelt auswirkt.
quelle
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.
quelle
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).
quelle
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. "
quelle