For some services (экс-: bluetooth) I have entries in both /etc/init.d/
and in /etc/init/
directory.
How do I know how this service is started? By sysvinit
or upstart
?
I am using Ubuntu 14.04.
У Вас может быть два набора сценариев, но у Вас только есть одна активная init система. На Ubuntu 14.04 это - Выскочка.
Так, неважно, ли Ваш сценарий находится под /etc/init.d
или /etc/init
, ответ, для которого init система запускает Ваш скрипт в соответствии с Ubuntu 14.04, всегда является Выскочкой.
Можно наблюдать то, что происходит, когда Вы пробуете, работает /etc/init.d
сценарий при помощи strace
зарегистрировать системные вызовы STDOUT:
sudo strace /etc/init.d/bluetooth start
Сначала Вы будете видеть, что init сценарий сначала загружает некоторые функции заголовка через /lib/lsb/init-functions
open("/lib/lsb/init-functions", O_RDONLY) = 3
Довольно скоро Вы будете видеть действие, отклоненное к связанному с выскочками сценарию:
open("/lib/lsb/init-functions.d/01-upstart-lsb", O_RDONLY) = 3
Это - просто сценарий оболочки, таким образом, можно открыть его и считать источник для наблюдения то, что он делает.
В то время как Вы продолжаете к полному вывод, я думаю, что Вы будете видеть, что команда перенаправляется для запуска сценария с помощью Новомодного сценария вместо сценария SysV init.
То, что интересно видеть, - то, что на 16,04, Выскочка дальнейшие перенаправления управление к systemd и связанное systemd обслуживание запускаются вместо этого:
write(1, "Starting bluetooth (via systemct"..., 53Starting bluetooth (via systemctl): bluetooth.service) = 53
Реалистичный совет использовать Новомодные сценарии и управление службами управляет на Ubuntu 14.04 для предотвращения сложности и потенциального беспорядка слоя SysV init совместимости. Аналогично, после того как Вы обновляете до 16,04, начните использовать собственный компонент systemd
файлы единицы и systemctl
команда для предотвращения включает ненужные слои совместимости.