在Debian決定之後, 看來未來init system的選項已經沒什麼爭議, 除了準備了解systemd之外, 也備忘早年各distro用來管理sys-v服務的工具。
Systemd:
---systemd以一支systemctl進行服務的設定,
原本/etc/init.d/裡的daemon現在的位置在/lib/systemd/下,具體位置各家可能有所調整,但是管理工具的用法都相同。
啟動:systemctl start foobar.service
停止:systemctl stop foobar.service
重新啟動:systemctl restart foobar.service
重讀設定:systemctl reload foobar.service
顯示狀態:systemctl status foobar.service
列出全部:systemctl list-unit-files --type=service 或 ls /etc/systemd/system/*.wants/
列出全部開機自行啟動的服務:systemctl list-unit-files|grep enabled
設定開機啟動:systemctl enable foobar.service
設定開機不啟動:systemctl disable foobar.service
查詢是否被設為開機啟動:systemctl is-enabled foobar.service
原本的runlevel機制由target取代:
telinit 3 --> systemctl isolate multi-user.target 或 systemctl isolate runlevel3.targetinit 5 --> systemctl isolate graphical.target 或 systemctl isolate runlevel5.target
設定開機自動進入的runlevel:
在systemd中不使用/etc/inittab, default runlevel是由soft link實現,例如default runlevel 3:
ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
但是由於default.target的位置每家不太一樣, 比較合適的作法是:
systemctl set-default -f multi-user.target
Sys-V:
列出全部: ls /etc/init.d/啟動: /etc/init.d/{SERVICENAME} start
停止: /etc/init.d/{SERVICENAME} stop
設為開機自動啟動: cd /etc/rc3.d; ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}
移除開機自動啟動: rm /etc/rc3.d/*{SERVICENAME}
切換runlevel: telinit 3
設定default runlevel: sed s/^id:.*:initdefault:/id:3:initdefault:/
除此之外各大Distro於Sys-V時期也有各自的管理工具:
Redhat(service/chkconfig):
啟動:service {SERVICENAME} start停止:service {SERVICENAME} stop
重新啟動:service {SERVICENAME} restart
重讀設定:service {SERVICENAME} reload
顯示狀態:service {SERVICENAME} status
列出全部:chkconfig --list
設定開機啟動:chkconfig {SERVICENAME} on
設定開機不啟動:chkconfig {SERVICENAME} off
查詢是否被設為開機啟動:chkconfig {SERVICENAME}
Debian(update-rc.d/invoke-rc.d):
啟動:invoke-rc.d {SERVICENAME} start停止:invoke-rc.d {SERVICENAME} stop
重新啟動:service {SERVICENAME} restart
重讀設定:service {SERVICENAME} reload
顯示狀態:service {SERVICENAME} status
列出全部:rcconf
設為開機自動啟動: update-rc.d {SERVICENAME} default
移除開機自動啟動: update-rc.d -f {SERVICENAME} remove
設定啟動與關閉的runlevel:
update-rc.d {SERVICENAME} start [order] [runlevel]
update-rc.d {SERVICENAME} stop [order][runlevel]
例如 update-rc.d {SERVICENAME} start 20 0 1 2 6
表示SERVICENAME在runlevel 0, 1, 2, 6以編號20的次序啟動
Ubuntu(upstart):
列出全部:initctl list啟動:initctl start {SERVICENAME}
停止:initctl stop {SERVICENAME}
設為開機自動啟動:
1. /etc/default/{SERVICENAME}, 將ENABLED=...改為ENABLED=1
2. /etc/init/{SERVICENAME}.override, 要嘛沒這檔案, 不然裏面必須包含start字樣, 不是manual
移除開機自動啟動: echo manual > /etc/init/{SERVICENAME}.override