[LINUX] Zusammenfassung der Unterschiede zwischen systemctl start, stop, restart, try-restart, reload, reload-or-restart, reload-or-try-restart
Der Unterbefehl von "systemctl" bezieht sich nur auf das Neustarten des Dienstes beim Starten / Stoppen, und obwohl es seltsamerweise viele vorbereitete Unterbefehle gibt, gibt es viele Punkte, die ich nicht verstehe, weil die wichtigen Unterbefehle unzureichend sind und die Benennung und das Verhalten heikel sind Ich habe es zusammengefasst.
Was Sie tun möchten → Entsprechende Befehlsübersichtstabelle
Was du machen willst |
COMMAND |
active |
inactive |
Ich möchte es starten |
systemctl start xxx |
nichts tun(exit 0) |
start (Starting,Started) |
ich will aufhören |
systemctl stop xxx |
stop (Stopping,Stoped) |
nichts tun(exit 0) |
Starten Sie neu, wenn Sie laufen, starten Sie, wenn Sie gestoppt sind |
systemctl restart xxx |
restart (Stopping,Starting,Started) |
start (Starting,Started) |
Starten Sie neu, wenn Sie ausgeführt werden, und tun Sie nichts, wenn Sie gestoppt sind |
systemctl try-restart xxx |
restart (Stopping,Starting,Started) |
nichts tun(exit 0) |
Bei Ausführung neu laden(Unterstützung für das Nachladen der Einheit erforderlich), Fehler wenn gestoppt |
systemctl reload xxx |
reload (Reloaded) |
Error(echo "Job for xxx.service invalid." >&2; exit 1) |
Bei Ausführung neu laden(Starten Sie neu, wenn das Gerät das Neuladen nicht unterstützt), Start wenn gestoppt |
systemctl reload-or-restart xxx |
reload (Reloaded) |
start (Starting,Started) |
Bei Ausführung neu laden(Starten Sie neu, wenn das Gerät das Neuladen nicht unterstützt), Fehler wenn gestoppt |
systemctl reload-or-try-restart xxx |
reload (Reloaded) |
Error(echo "Job for xxx.service invalid." >&2; exit 1) |
Bei Ausführung neu laden(Starten Sie neu, wenn das Gerät das Neuladen nicht unterstützt)Nichts tun, wenn gestoppt |
if systemctl -q is-active xxx; then systemctl reload-or-restart xxx; fi |
reload (Reloaded) |
nichts tun(exit 0) |
»Ich möchte dich preisen
- Es ist ein bisschen schlauer als in der SysVinit-Ära, da es sich so verhält, als würde man nichts tun, wenn es nicht benötigt wird, wenn man sich den Status von "Start" und "Stopp" ansieht.
- In der SysVinit-Ära war "Neustart" ein Bild des Ignorierens des Vorzustands und des Ausführens von Stopp und Start, aber mit systemctl verhält es sich, wenn es sich im gestoppten Zustand befindet, so, als würde nur der Start ohne unnötigen Stopp ausgeführt. Ein bisschen schlau. Intern zeigt vielleicht nur das Aufrufen von Stop / Start die Vorteile, Stop / Start beim Neustart intelligenter zu machen.
- Ich bin froh, dass ich "neu laden oder neu starten" kann. In den Tagen von SysVinit habe ich oft einen Einzeiler geschrieben, der den Status überprüft und das Neuladen und Neustarten ordnungsgemäß verwendet. Hmm? Aber dieses Verhalten unterscheidet sich ein wenig vom Namen ...?
――Was Sie sich beschweren möchten
――Der Eindruck und das Verhalten des Wortes "Try-Restart" sind unterschiedlich, nicht wahr? Als mir gesagt wurde, ich solle einen Neustart versuchen, hatte ich den Eindruck, dass "Vorstatus ignorieren und Stopp neu starten, vorerst starten", aber in Wirklichkeit, abhängig vom Vorstatus, "Neustart (Stopp, Start), wenn er ausgeführt wird und bereits Wenn es gestoppt wird, endet es normal, ohne anzuhalten und nichts zu tun. "Vielmehr verhält es sich subtil intelligent. Nein, das Verhalten selbst ist gut, weil ich oft diese Art von Verhalten möchte, aber ich interessiere mich nur für den Namen ... Gibt es ein Problem, wenn es das Gefühl einer englischen Muttersprache ist? Dies. Bin ich falsch darin, meinen Versuch zu verstehen?
- "Nachladen oder Neustart" ist unlogisch und verwirrend, nicht wahr? ~~ Was Sie tun, ist Nachladen oder Starten, richtig? ~~ Ah! Bedeutet dieser Neustart, dass er gestartet wird, wenn er nicht ausgeführt wird? Wenn das Gerät jedoch kein Neuladen unterstützt, bedeutet dies, dass ein Neustart anstelle eines Neuladens ausgeführt wird! Aber wenn es nicht läuft, erhalten Sie den gleichen Fehler wie beim Neuladen! Wie oft hast du damit angefangen? ?? Es ist unlogisch und verwirrend, wenn man es als Ganzes betrachtet! Vielleicht verhält sich "Neuladen oder Neustarten" wie ein Fehler, wenn es nicht ausgeführt wird, und "Laden oder Neustarten oder Starten separat" Ich denke, ich hätte einen Unterbefehl mit einem Namen wie "_" erstellen und ihn wie den aktuellen "Neuladen oder Neustart" verhalten sollen, obwohl es keinen solchen Unterbefehl gibt. Außerdem, wenn ich das Verhalten jetzt ändere, wird die Kompatibilität nicht aufrechterhalten und es treten Probleme auf, und es ist in Ordnung, weil es ein späteres Festival ist ...
――Warum nicht "Neu laden, wenn ausgeführt (Neustart, wenn das Gerät das Neuladen nicht unterstützt), nichts tun, wenn gestoppt" nicht vorhanden ist! ?? Es wird eine Szene geben, um es zu benutzen. Ich schreibe immer diesen einen Liner.
――Ich verstehe die Bedeutung des Wortes "Try-Restart" nicht noch einmal ... Warum gibt "reload-or-try-restart" einen Fehler aus, wenn es gestoppt wird, obwohl es während des Stopps nichts getan und normal beendet hat? Ist der Name und das Verhalten der Unterbefehle nicht insgesamt zu unterschiedlich? Ist es der Ressourcenverwaltungsmechanismus, der in der letzten Ausgabe herauskam, SysVinit oder Upstart als Sprungbrett zu verwenden? Was ist das für ein ungekünsteltes Gefühl ...
Ich möchte, dass der Unterbefehl "Legacy-Alias", der in Bash-Completion angezeigt wird, aus den Completion-Kandidaten verschwindet.
Die folgenden Unterbefehle existierten nach der Konvention einiger Distributionen, aber wenn sie in systemctl zusammengestellt werden, werden die folgenden entsprechenden Aliase intern als "Legacy-Alias" definiert und können akzeptiert und verwendet werden, aber grundsätzlich Er benutzt es nicht.
- condstop -> stop
- condrestart -> try-restart
- condreload -> reload-or-try-restart
- force-reload -> reload-or-try-restart
- check -> is-active
Diese Unterbefehle erscheinen nicht in der Liste von "systemctl --help", aber sie werden so behandelt, als wären sie ein Mensch. Grundsätzlich brauche ich es nicht, aber bei Vervollständigung wie "Bash-Vervollständigung" wird es normalerweise als Unterbefehl in der Liste angezeigt. Aus diesem Grund gibt es auch kostenlos viele dienstbezogene Unterbefehle und es ist schwer zu verstehen, aber "Was ist der Unterschied zwischen Cond Reload und Reload? Hilfe ... Ich habe es herausgefunden, als ich den Mann locker ansah! Es ist ein kostenloser Alias! Zeit zum Überprüfen! Ich denke, es hat die Ressourcen von Ingenieuren auf der ganzen Welt verschwendet, und ich möchte, dass sie verwirrt und verärgert sind und von der ergänzenden Liste verschwinden. Gibt es nicht einen Fall, in dem Sie es wagen, dies zu ergänzen und zu nutzen?
Guchi
Nein, ich weiß, dass es im Vergleich zu verschiedenen Dingen in der Vergangenheit viele gute Mechanismen gibt, aber ich bin überrascht, dass die Unterbefehlsgruppe des Dienstbetriebssystems, die ich am häufigsten verwende, subtil ist. Vielleicht ist es mir egal, weil ich status / start / stop / restart / reload nur verwende, wenn ich es nur normal benutze.
Wenn Sie eine ansible-Konfigurationsdatei erstellen, wenn Sie reload verwenden oder ordnungsgemäß starten möchten, während Sie den Status im Voraus überprüfen, oder wenn Sie den idealen Status anhand des Endstatus angemessen beurteilen möchten, wird der Unterbefehlsname logisch organisiert und gespeichert. Ich kann es nicht tun und das Verhalten ist schlampig, also mache ich mir Sorgen und schreibe am Ende, während ich jedes Mal das Dokument und das tatsächliche Verhalten überprüfe.