我不知道 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 传递一个参数。

那么 Ubuntu Xenial 的 init 与 systemd 的集成总体进展如何?或者它真的只是一系列向后兼容的黑客行为。我原本以为一切都已转换为这些新的服务文件。

答案1

init.d脚本从 LSB 包中获取一些 bash 函数

. /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

相关内容