Jaka jest różnica między „usługą” a „/etc/init.d/”?

113

Od jakiegoś czasu zarządzam instalacjami serwerów zarówno w trybie Ubuntu, jak i poza nim - jestem dość przystosowany do /etc/init.d/restartowania usług. Teraz dostaję tę wiadomość:

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

Wydaje się, że stało się tak w najnowszym LTS Ubuntu - dlaczego? Co jest tak złego /etc/init.d/i jaka / jest różnica między servicei /etc/init.d/?

Marco Ceppi
źródło
3
Upstart Cookbook zawiera dobre wyjaśnienie racjonalne przełączania.
ændrük

Odpowiedzi:

103

/etc/init.dskrypty to stary sposób robienia rzeczy. Pochodzą ze standardu System V. Jednak te skrypty są uruchamiane tylko w określonej sekwencji, więc nie można ustalić rzeczywistych zależności.

Dlatego upstart został opracowany z zamiarem zastąpienia wszystkich /etc/init.dskryptów skryptami upstart (in /etc/init).

serviceumożliwia płynne przejście ze /etc/init.dskryptów do skryptów upstart. W przyszłości, gdy coraz więcej skryptów zostanie przeniesionych na upstart, usługa będzie nadal działać, ponieważ znajdzie obie możliwości.

txwikinger
źródło
6
Upstart zostanie wycofany, prawda?
wrongusername
6
systemd zastąpi upstart po wdrożeniu planów - 14.04 LTS zastosuje upstart. Zostało to ogłoszone przez Marka Shuttlewortha , w poście zatytułowanym Przegrywając łaskawie
nie łatka
28

Sprawdź także stronę manuala komendy service: man service

serviceuruchamia skrypt w przewidywalnym środowisku (katalog roboczy to / i ustawiono tylko 2 zmienne środowiskowe: LANG i TERM). Dodaje także możliwość robienia --full-restart. Więc by podsumować:

  1. service może uruchamiać skrypty z / etc / init lub /etc/init.d (upstart lub System V)
  2. service uruchamia skrypty w przewidywalnym środowisku.

Aspekt „przewidywalnego środowiska” może powodować problemy, jeśli z jakiegoś powodu skrypt zależy od zmiennej środowiskowej. Jest prawdopodobnie sposób na obejście tego, ale nie wiem, co to jest, a to wykracza poza zakres tego pytania :)

Joe Marty
źródło
2
Cześć @Joe Marty, Właśnie tego problemu eksperymentuję teraz. Mam usługę, która przekazuje zmienną środowiskową „DISPLAY”, która nie jest obecna podczas uruchamiania demona za pomocą „service myservice start”, ale jest obecna podczas uruchamiania go za pomocą „/etc/init.d/myservice start”. Masz pomysł, jak udostępnić tę zmienną?
frandevel