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

В течение некоторого времени я управлял установкой серверов как на 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/?

2 ответа

Решение

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

Таким образом, выскочка была разработана с целью заменить все /etc/init.d скрипты с выскочившими скриптами (в /etc/init).

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

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

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

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

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

Другие вопросы по тегам