В настоящее время я переношу свою платформу разработки на Ubuntu Xenial и не могу понять, как Ubuntu интегрирует скрипты init.d с systemd. Например, посмотрите на этот только что созданный перезапуск службы для MariaDB, включенный в базовый репозиторий.
root@xenial:/etc/init.d# /etc/init.d/mysql restart
[ ok ] Restarting mysql (via systemctl): mysql.service.
Я посмотрел в скрипт и не вижу, как он вообще вызывает systemd. Так какие же хаки он делает, чтобы интегрировать "(с systemctl)"?
Это подводит меня к тому, что я на самом деле пытаюсь сделать: иметь возможность передавать аргументы в systemd.
Итак, в целом, насколько далеко продвинулась интеграция init в Ubuntu Xenial с systemd или это действительно просто серия хаков для обратной совместимости. Я ожидал обнаружить, что все было преобразовано в эти новые служебные файлы.
решение1
Скрипты init.d
используют некоторые функции bash из пакета LSB
. /lib/lsb/init-functions
Которые загружают другие из других пакетов
# Include hooks from other packages in /lib/lsb/init-functions.d
for hook in $(run-parts --lsbsysinit --list /lib/lsb/init-functions.d 2>/dev/null); do
[ -r $hook ] && . $hook || true
done
Где systemd внедряет собственное перенаправление
~$ dpkg -S /lib/lsb/init-functions.d/40-systemd
systemd: /lib/lsb/init-functions.d/40-systemd
Примечание:Найдено с помощьюstrace /etc/init.d/.. status