Я не могу понять, как systemd интегрируется в Ubuntu 16.04.

Я не могу понять, как systemd интегрируется в Ubuntu 16.04.

В настоящее время я переношу свою платформу разработки на 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

Связанный контент