Was ist der Unterschied zwischen "Service" und "/etc/init.d/"?

113

Ich verwalte seit einiger Zeit Serverinstallationen sowohl auf Ubuntu als auch außerhalb von Ubuntu /etc/init.d/. Jetzt bekomme ich diese Nachricht:

root@tatooine:~# /etc/init.d/mysql status
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql status

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the status(8) utility, e.g. status mysql
mysql start/running, process 14048

Dies scheint in der neuesten LTS von Ubuntu geschehen zu sein - warum? Was ist so schlimm an /etc/init.d/und was / gibt es einen Unterschied zwischen serviceund /etc/init.d/?

Marco Ceppi
quelle
3
Das Upstart-Kochbuch enthält eine gute Erklärung für das Rationale zum Umschalten.
ændrük

Antworten:

103

/etc/init.dSkripte sind die alte Art, Dinge zu tun. Sie stammen aus dem System V-Standard. Diese Skripte werden jedoch nur in einer bestimmten Reihenfolge ausgelöst, sodass keine echten Abhängigkeiten hergestellt werden können.

Daher wurde upstart mit der Absicht entwickelt, alle /etc/init.dSkripte durch upstart-Skripte (in /etc/init) zu ersetzen .

serviceermöglicht den reibungslosen Übergang von /etc/init.dSkripten zu Upstart-Skripten. Wenn in Zukunft immer mehr Skripte an upstart übertragen werden, funktioniert der Dienst weiterhin, da beide Möglichkeiten gefunden werden.

txwikinger
quelle
6
Emporkömmling wird jetzt auslaufen, richtig?
Falscher Benutzername
6
systemd wird den Upstart ersetzen, sobald Pläne vorliegen - 14.04 LTS wird den Upstart verwenden. Dies wurde von Mark Shuttleworth angekündigt , in einem Beitrag mit dem Titel Gnädig verlieren
kein Patch
28

Überprüfen Sie auch die Manpage für den Dienstbefehl: man service

serviceführt ein Skript in einer vorhersehbaren Umgebung aus (Arbeitsverzeichnis ist / und nur 2 Umgebungsvariablen sind festgelegt: LANG und TERM). Es fügt auch die Fähigkeit zu tun --full-restart. Also zusammenfassend:

  1. service kann Skripte von / etc / init oder /etc/init.d ausführen (upstart oder System V)
  2. service führt Skripte in einer vorhersehbaren Umgebung aus.

Der Aspekt "Vorhersagbare Umgebung" kann zu Problemen führen, wenn Ihr Skript aus irgendeinem Grund von einer Umgebungsvariablen abhängt. Es gibt wahrscheinlich einen Weg, das zu umgehen, aber ich weiß nicht, was es ist, und das würde den Rahmen dieser Frage sprengen :)

Joe Marty
quelle
2
Hallo @Joe Marty, das ist genau das Problem, mit dem ich gerade experimentiere. Ich habe einen Dienst, der auf einer "DISPLAY" -Umgebungsvariablen basiert, die beim Starten des Dämons mit "service myservice start" nicht vorhanden ist, aber beim Starten mit "/etc/init.d/myservice start" vorhanden ist. Irgendeine Idee, wie diese Variable verfügbar sein soll?
Freitag