it-swarm.it

Qual è la differenza tra "Service" e "/etc/init.d/"?

Da qualche tempo gestisco installazioni di server sia dentro che fuori di Ubuntu: sono diventato abbastanza abituato a /etc/init.d/ per riavviare i servizi. Ora ricevo questo messaggio:

[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

Questo sembra essere stato realizzato nell'ultimo LTS di Ubuntu - perché? Cosa c'è di così brutto in /etc/init.d/ e cosa/c'è una differenza tra service e /etc/init.d/?

113
Marco Ceppi

Gli script /etc/init.d sono il vecchio modo di fare le cose. Provengono dallo standard System V. Tuttavia, tali script vengono attivati ​​solo in una sequenza particolare, quindi non è possibile stabilire dipendenze reali.

Pertanto, upstart è stato sviluppato con l'intento di sostituire tutti gli script /etc/init.d con script upstart (in /etc/init).

service consente la transizione graduale dagli script /etc/init.d agli script upstart. In futuro, quando sempre più script verranno trasferiti all'inizio, il servizio continuerà a funzionare perché trova entrambe le possibilità.

103
txwikinger

Controllare anche la pagina man per il comando di servizio: man service

service esegue uno script in un ambiente prevedibile (la directory di lavoro è/e sono impostate solo 2 variabili d'ambiente: LANG e TERM). Aggiunge inoltre la possibilità di eseguire --full-restart. Quindi per riassumere:

  1. service può eseguire script da/etc/init o /etc/init.d (upstart o System V)
  2. service esegue script in un ambiente prevedibile.

L'aspetto "ambiente prevedibile" può causare problemi se lo script dipende da una variabile di ambiente per qualche motivo. C'è probabilmente un modo per aggirare questo, ma non so cosa sia, e questo va oltre lo scopo di questa domanda :)

28
Joe Marty