我不明白 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 對 systemd 的 init 整合總共走了多遠,或者它實際上只是一系列向後相容的 hack。我期待發現所有內容都已轉換為這些新的服務文件。

答案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

相關內容