Ich bin neu in Linux und habe mich mit einer Amazon Lightsail-Instanz (Ubuntu 16.04 LTS) getestet.
Bei der Durchsicht der vielen Anleitungen, auf die ich gestoßen bin, sehe ich Leute, die verschiedene Befehle verwenden, um einen Dienst zu starten / anzuhalten / neu zu starten / neu zu laden / den Status zu überprüfen. Speziell diese;
sudo systemctl status apache2.service
sudo /bin/systemctl status apache2.service
sudo /etc/init.d/apache2 status
sudo service apache2 status
Alle oben genannten Befehle funktionieren.
- Sollte ich einen Befehl dem anderen vorziehen?
- Wenn ja, warum dann?
- Gibt es noch andere Befehle, die ich beachten muss?
Die Verwendung von init.d in Monit verursachte Probleme, als ich die Statusoption verwenden wollte (Status ist, dass der Dienst offline ist, als er tatsächlich online war - von Monit neu gestartet). Ändern Sie den Code in Monit von inid.d in / bin / systemctl und korrigieren Sie ihn.
Es scheint, dass die Verwendung von init.d mehr Informationen darüber liefert, was bei den anderen passiert ist. Wenn ich einen der anderen Befehle verwenden sollte, können sie weitere Informationen darüber anzeigen, was getan wurde?
ubuntu@ip-172-26-12-245:~$ sudo systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /bin/systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /etc/init.d/pure-ftpd restart
[ ok ] Restarting pure-ftpd (via systemctl): pure-ftpd.service.
ubuntu@ip-172-26-12-245:~$ sudo service pure-ftpd restart
ubuntu@ip-172-26-12-245:~$
Ich möchte mich im Voraus bei allen bedanken, die sich die Zeit genommen haben, diese Frage zu lesen und zu beantworten.
quelle
systemctl
ist die bevorzugte Syntax undservice
wird aus Gründen der Abwärtskompatibilität bereitgestellt./etc/init.d/pure-ftpd
o.ä. rufen die Start / Stopp-Skripte direkt auf.Antworten:
Zu Beginn gibt es eine ganze Geschichte und einen Kampf zwischen dem Übergang von
SysVInit
zuSystemD
. Anstatt jedoch zu versuchen, alles in einer Antwort zusammenzufassen, verweise ich Sie auf Google Venturing, um weitere Details zum Verlauf sowie einen bestimmten Artikel zum Thema zu erhalten:http://www.tecmint.com/systemd-replaces-init-in-linux/
Zusammenfassend war es jedoch ein langsamer und mühsamer Übergang. Einige ältere Funktionen wurden beibehalten (z. B.
init.d
bis zu einem gewissen Grad). Wenn Sie die Option haben, diesesystemctl
für Ihre Dienststeuerung zu verwenden, empfehle ich die Verwendung dieser Option . Es ist die absehbare Zukunft für Linux und eventuell ältereSysVInit
Methoden werden als veraltet betrachtet und entfernt.So decken Sie jeden einzelnen Punkt ab, den Sie aufgelistet haben:
sudo systemctl status apache2.service
Dies ist der neue
SystemD
Ansatz für den Umgang mit Diensten. Künftig verwenden Anwendungen unter Linux die systemd-Methode, keine andere.sudo /bin/systemctl status apache2.service
Dies ist dasselbe wie beim vorherigen Befehl. Der einzige Unterschied in diesem Fall besteht darin, dass das
$PATH
Auffinden des Befehls nicht von der Umgebungsvariablen der Shell abhängt, sondern dass der Befehl explizit aufgelistet wird, indem der Pfad zum Befehl angegeben wird.sudo /etc/init.d/apache2 status
Dies ist die ursprüngliche
SysVInit
Methode zum Aufrufen eines Dienstes. Init-Skripte würden für einen Dienst geschrieben und in dieses Verzeichnis gestellt. Während diese Methode immer noch von vielen verwendet wird,service
wurde der Befehl, der diese Methode zum Aufrufen von Diensten in ersetztSysVInit
. Es gibt einige ältere Funktionen für diese auf neueren Systemen mitSystemD
, aber die meisten neueren Programme enthalten dies nicht und nicht alle älteren Anwendungs-Init-Skripte funktionieren damit.sudo service apache2 status
Dies war das Hauptwerkzeug, das auf
SysVInit
Systemen für Dienste verwendet wurde. In einigen Fällen wurde nur eine Verknüpfung zu den/etc/init.d/
Skripten hergestellt, in anderen Fällen wurde ein an anderer Stelle gespeichertes Init-Skript verwendet. Es sollte ein reibungsloser Übergang zur Behandlung von Dienstabhängigkeiten ermöglicht werden.Zuletzt erwähnen Sie, dass Sie wissen möchten, wie Sie mehr Informationen aus den Befehlen herausholen können, da einige mehr Informationen liefern als andere. Dies wird fast immer von der Anwendung und dem Design ihrer Init- oder Servicedatei bestimmt. In der Regel war es jedoch erfolgreich, wenn es im Stillen abgeschlossen wurde. Um jedoch ein
start
,stop
oder zu überprüfen , könnenrestart
Sie denstatus
Unterbefehl verwenden, um zu sehen, wie es funktioniert. Sie haben erwähnt, dass einstatus
Befehl in einem alten Init-Skript falsch ist. Das ist ein Fehler, den die Anwendungsentwickler untersuchen müssten. Da jedoch Init-Skripte zur veralteten Methode für die Behandlung von Diensten werden, ignorieren sie den Fehler möglicherweise nur, bis sie die Init-Skriptoption vollständig entfernen. Dassystemctl status
sollte immer korrekt funktionieren, ansonsten sollte ein Fehler bei den Anwendungsentwicklern protokolliert werden.quelle
systemctl
Durchsucht die Verzeichnisse, in denen die Servicedateien gespeichert sind, und fügt den ".service" für Sie hinzu, wenn er gefunden wird. Wenn Sie beispielsweise nach dem Schreiben einmal auf die Tabulatortaste klickensudo systemctl status apache2
, sollte dies durch Hinzufügen.service
für Sie vervollständigt werden . Wenn es mehr als eine apache2-systemctl-Datei gibt (wie z. B..service
und a), müssen.target
Sie zweimal die Tabulatortaste