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


Ich habe Server-Installationen sowohl auf als auch außerhalb von Ubuntu-Flavour für einige Zeit verwaltet - ich bin ziemlich darauf eingestellt /etc/init.d/ zum Neustart von Diensten. 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 daran? /etc/init.d/ und was ist da ein Unterschied? service und /etc/init.d/?


110
2017-08-12 19:12


Ursprung


Das Upstart-Kochbuch enthält eine gute Erklärung für das Umschalten. - ændrük


Antworten:


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

Deshalb wurde der Emporkömmling mit der Absicht entwickelt, alle zu ersetzen /etc/init.d Skripte mit Upstart - Skripten (in /etc/init).

service ermöglicht den reibungslosen Übergang von /etc/init.d Skripte zum Starten von Skripts. Wenn in Zukunft mehr und mehr Skripte zu Upstart übertragen werden, wird der Dienst weiterhin funktionieren, da er beide Möglichkeiten findet.


97
2017-08-12 19:33



Upstart wird jetzt auslaufen, oder? - wrongusername
systemd ersetzt den Emporkömmling sobald Pläne vorhanden sind - 14.04 LTS wird Emporkömmling verwenden. Dies wurde von angekündigt Mark Shuttleworth, in einem Beitrag mit dem Titel Verlieren gnädig - not a patch


Überprüfen Sie auch die Manpage für den Service-Befehl: man service

service Läuft ein Skript in einer vorhersehbaren Umgebung (Arbeitsverzeichnis ist / und nur 2 Umgebungsvariablen sind gesetzt: LANG und TERM). Es fügt auch die Fähigkeit hinzu, zu tun --full-restart. Also zusammenfassend:

  1. service kann Skripte entweder von / etc / init oder /etc/init.d (Upstart oder System V) ausführen
  2. service Läuft Skripte in einer vorhersehbaren Umgebung.

Der Aspekt "vorhersehbare Umgebung" kann Probleme verursachen, wenn Ihr Skript aus irgendeinem Grund von einer Umgebungsvariablen abhängt. Es gibt wahrscheinlich einen Weg, um das zu umgehen, aber ich weiß nicht, was es ist, und das ist über den Rahmen dieser Frage :)


26
2018-06-08 15:52



Hallo @Joe Marty, Das ist genau das Problem, das ich jetzt experimentiere. Ich habe einen Dienst, der auf eine Umgebungsvariable "DISPLAY" verweist, die nicht vorhanden ist, wenn der Daemon mit "service myservice start" gestartet wird, aber beim Start mit "/etc/init.d/myservice start" angezeigt wird. Gibt es eine Idee, wie diese Variable verfügbar sein soll? - frandevel