linux当前使用3个主要的init系统。几年前,只有一个,SysVinit。但是SysVinit严重缺乏诸如服务依赖关系图之类的功能,因此到目前为止,在大多数发行版中都已弃用它。当前大多数发行版都在切换到systemd。虽然也有暴发户。
但是,这是针对三个init系统中的每个系统的问题的答案:
SysVinit
Debian和RedHat当前使用的SysVinit。尽管下一版的RedHat(7)将使用systemd。
在启动时启用SysVinit服务的唯一方法是将它们符号链接到/etc/rc3.d
(或/etc/rc2.d
)中。所有服务都可以在中找到/etc/init.d
。但是请注意,发行版通常会拥有自己的工具来管理这些文件,而应改用该工具。(Fedora / RedHat有service
和chkconfig
,ubuntu有update-rc.d
)
列出服务:
ls /etc/init.d/
启动服务:
/etc/init.d/{SERVICENAME} start
要么
service {SERVICENAME} start
停止服务:
/etc/init.d/{SERVICENAME} stop
要么
service {SERVICENAME} stop
启用服务:
cd /etc/rc3.d
ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}
(S95
用于指定顺序。S01将在S02之前开始,依此类推)
禁用服务:
rm /etc/rc3.d/*{SERVICENAME}
系统化
使用systemd最值得注意的发行版是Fedora。虽然它被许多其他人使用。另外,随着Debian选择在新贵的情况下使用systemd,它将成为大多数发行版的事实上的新贵系统(ubuntu已经宣布他们将放弃systemd的新贵)。
列出服务:
systemctl list-unit-files
启动服务:
systemctl start {SERVICENAME}
停止服务:
systemctl stop {SERVICENAME}
启用服务:
systemctl enable {SERVICENAME}
禁用服务:
systemctl disable {SERVICENAME}
暴发户
Upstart由Ubuntu员工开发。但是在debian 决定使用systemd之后,Ubuntu 宣布将放弃新贵。
RedHat也曾短暂地使用过Upstart,因为RHEL-6中存在它,但并不常用。
列出服务:
initctl list
启动服务:
initctl start {SERVICENAME}
停止服务:
initctl stop {SERVICENAME}
启用服务:
不幸的是,有2种方法:
将有一个/etc/default/{SERVICENAME}
包含一行的文件ENABLED=...
。将此行更改为ENABLED=1
。
将有一个文件/etc/init/{SERVICENAME}.override
。确保它包含start
(或完全不包含),而不是manual
。
禁用服务:
echo manual > /etc/init/{SERVICENAME}.override
注意:Gentoo还使用了“ OpenRC”初始化系统。目前,Gentoo是唯一使用它的发行版,尚未考虑使用它,也未得到任何其他发行版的支持。因此,我不讨论它的用法(尽管如果可以,我可以添加它)。