В чем разница между «Service» и «/etc/init.d/»?

113

В течение некоторого времени я управлял установками серверов как в Ubuntu, так и вне его - я вполне приспособился к /etc/init.d/перезапуску сервисов. Теперь я получаю это сообщение:

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

Кажется, это произошло в последней версии LTS Ubuntu - почему? Что такого плохого /etc/init.d/и в чем / есть разница между serviceи /etc/init.d/?

Марко Чеппи
источник
3
Upstart Cookbook содержит хорошее объяснение рационального для переключения.
ændrük

Ответы:

103

/etc/init.dСценарии - это старый способ ведения дел. Они взяты из стандарта System V. Однако эти сценарии запускаются только в определенной последовательности, поэтому никакие реальные зависимости не могут быть установлены.

Поэтому выскочка была разработана с намерением заменить все /etc/init.dскрипты выскочившими скриптами (в /etc/init).

serviceпозволяет плавно переходить от /etc/init.dсценариев к сценариям upstart. В будущем, когда все больше и больше сценариев переносятся в upstart, сервис все равно будет работать, поскольку он находит обе возможности.

txwikinger
источник
6
Выскочка сейчас будет прекращена, верно?
неправильное имя
6
systemd заменит выгрузку, как только планы будут созданы - 14.04 LTS будет использовать выскочку. Об этом сообщил Марк Шаттлворт , в посте под названием Потеря великодушно
не патч
28

Также проверьте справочную страницу для сервисной команды: man service

serviceзапускает сценарий в предсказуемой среде (рабочий каталог - / и установлены только 2 переменные среды: LANG и TERM). Это также добавляет возможность делать --full-restart. Итак, подведем итог:

  1. service может запускать скрипты из / etc / init или /etc/init.d (upstart или System V)
  2. service запускает скрипты в предсказуемой среде.

Аспект «предсказуемой среды» может вызвать проблемы, если ваш сценарий по какой-то причине зависит от переменной среды. Возможно, есть способ обойти это, но я не знаю, что это такое, и это выходит за рамки этого вопроса :)

Джо Марти
источник
2
Привет @ Джо Марти, это именно та проблема, которую я сейчас экспериментирую. У меня есть служба, которая использует переменную окружения «DISPLAY», которая отсутствует при запуске демона с «service myservice start», но присутствует при запуске с «/etc/init.d/myservice start». Любая идея о том, как сделать эту переменную доступной?
frandevel