Was ist der Unterschied zwischen service und systemctl?

33

Vielleicht ist das eine triviale Frage, aber mir ist das nicht ganz klar. Auf einem unserer Server laufen einige Hintergrundprozesse, mit denen begonnen wurde, serviceund einige andere, mit denen begonnen systemctlwurde:

$ service nginx start
$ systemctl start gunicorn

Was ist der Unterschied zwischen den beiden Befehlen? Welches ist die bevorzugte Art, mit Hintergrunddiensten umzugehen? Wie konfiguriere ich den bevorzugten Befehl?

Aidas Bendoraitis
quelle
3
gibt es eine sehr gute Erklärung gibt
Félix Brunet
Der schmerzhafte Teil davon ist, dass manche sagen, Service sei "nicht mehr verfügbar" und wenn nicht, warum ändern sie dann die Reihenfolge der Argumente wie bei "find / grep / locate" etc ... keine Konsistenz innerhalb von Linux-Releases :(
killjoy

Antworten:

37

serviceist ein "High-Level" -Befehl zum Starten und Beenden von Diensten unter verschiedenen Unixen und Linuxen. Leitet abhängig vom "untergeordneten" Service-Manager serviceauf verschiedene Binärdateien um.

Beispielsweise wird unter CentOS 7 eine Weiterleitung zu ausgeführt systemctl, während unter CentOS 6 das entsprechende /etc/init.dSkript direkt aufgerufen wird. Auf der anderen Seite leitet Ubuntu in älteren Releases auf weiterupstart

serviceist für das grundlegende Servicemanagement ausreichend, während ein direkter Anruf systemctlgrößere Steuerungsmöglichkeiten bietet.

Shodanshok
quelle
9

systemctlist im Grunde eine leistungsfähigere Version von service.

Mit servicekönnen Sie nur Befehle mit dem Dienst tun (dh status, reload, restart) , während mit systemctlanspruchsvolleres Befehlen wie verwenden kann:

systemctl is-failed name.service # check if service failed to load

Oder Maskierungsdienste:

systemctl mask name.service

Auf dieser Seite gibt es viele gute Informationen von Ask Ubuntu.

SamCyanide
quelle
1

systemctlist das Hauptdienstprogramm zur Steuerung von Daemons / Diensten systemd,
während der serviceBefehl das traditionelle Dienstprogramm der SysVinitWelt ist.

Eine der Funktionen von systemd besteht darin, mit SysVinit / Legacy-Befehlen kompatibel zu sein.
Wenn Sie also den systemctlBefehl haben,
service foo startist dies ein Wrapper systemctl start foo.

Gleiche Geschichte für chkconfig.

maioman
quelle