我目前正在將我的開發平台遷移到 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