it-swarm.dev

Jaký je rozdíl mezi „Service“ a „/etc/init.d/“?

Nějakou dobu řídím instalace serverů jak na Ubuntu, tak i mimo ni - docela jsem se přizpůsobil /etc/init.d/ pro restartování služeb. Teď dostanu tuto zprávu:

[email protected]:~# /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

Zdá se, že k tomu došlo v posledních LTS Ubuntu - proč? Co je špatného na /etc/init.d/ a jaký je rozdíl mezi service a /etc/init.d/?

115
Marco Ceppi

/etc/init.d skripty jsou starý způsob, jak dělat věci. Pocházejí ze standardu System V. Tyto skripty jsou však spouštěny pouze v určité posloupnosti, takže nelze stanovit skutečné závislosti.

Proto byl vyvinut upstart s cílem nahradit všechny /etc/init.d skripty s upstart skripty (v /etc/init).

service umožňuje hladký přechod z /etc/init.d skripty pro upstart skripty. V budoucnu, kdy bude stále více skriptů přenášeno do upstartu, bude služba stále fungovat, protože najde obě možnosti.

106
txwikinger

Zkontrolujte také na manuálové stránce příkaz služby: man service

service spustí skript v předvídatelném prostředí (pracovní adresář je/a jsou nastaveny pouze 2 proměnné prostředí: LANG a TERM). Přidává také schopnost dělat --full-restart. Takže shrnout:

  1. service může spouštět skripty z/etc/init nebo /etc/init.d (upstart nebo System V)
  2. service spouští skripty v předvídatelném prostředí.

Aspekt „předvídatelné prostředí“ vám může způsobit problémy, pokud váš skript z nějakého důvodu závisí na proměnné prostředí. Pravděpodobně existuje způsob, jak to obejít, ale nevím, co to je, a to je nad rámec této otázky :)

29
Joe Marty