Linux运行级别及其目的(SysVinit)
Linux依靠运行级别来确定在系统启动时哪些功能可用,哪些不可用。
运行级别编号从0到9,并且为每个级别分配了一组服务,这些服务在进入特定运行级别时应处于活动状态。
0 –保留,一个过渡运行级别,表示用于将系统从一种状态转换为另一种状态。
在现代硬件上,系统应完全断电。
1 –保留,安装了本地文件系统(读写)的单用户。
通常用于低级系统维护(调整分区大小等)。
2 –在Debian系列操作系统上,运行X的完整多用户模式。
通常在其他发行版上未定义。
3-在Red Hat,Fedora,Mandriva和大多数其他发行版上,具有控制台登录屏幕的完整多用户模式。
4 –通常默认情况下未定义。
5-在Red Hat,Fedora,Mandriva和大多数其他发行版上,其行为与运行级别3相同,但增加了X运行。
6 –保留,另一个过渡运行级别,用于重新启动系统。
计算机已完全关闭,然后自动重新启动。
s或者S-保留相同,用于仅安装了根文件系统的单用户模式(只读)。
7-9 –有效的运行级别,尽管没有真正记录。
这是因为"传统" Unix变体不使用它们。
a,b,c –可以在运行的系统上调用这些运行级别,以告诉init仅处理具有运行级别a,b或者c的/etc/inittab文件条目。
如果对系统正在运行的当前运行级别有疑问,只需键入运行级别:
# runlevel 2 3
输出显示先前的(2)和当前的(3)系统运行级别。
更改运行级别
以下部分仅介绍类似于System-V的初始化实用程序(Systemd,Upstart?也许在将来的某个时候)。
编辑<em>/etc/inittab </em>文件
在SysV启动脚本的Linux实现中,内核启动一个名为init的进程,该进程读取其配置文件并启动某些脚本。
这些脚本可能并且通常在一个运行级别之间有所不同。
SystVinit通过检查/etc/inittab文件中的:initdefault:条目来确定默认运行级别(如果有任何设置)。
使用Debian系统,我们通常希望获得以下信息:
$grep default /etc/inittab # The default runlevel. id:2:initdefault:
在Fedora上,该行可能看起来有些不同:
$grep default /etc/inittab # The default runlevel. id:5:initdefault:
这些默认运行级别可以通过编辑/etc/inittab
文件来更改。
尽管文件修改非常简单,但是最好由专家来更改文件的内容。
此外,在极少数情况下,我们实际上需要更改默认运行级别。
还要提到的另一件事是,对/etc/inittab文件的更改将在系统重新启动或者运行telinit q命令重新检查该文件之前生效。
使用<em> init </em>和<em> telinit </em>命令
当系统已经在运行时,我们可能更经常需要随时更改运行级别。
众所周知,init是Linux内核运行的第一个进程,并且是所有进程的父级。
它的主要作用是从/etc/inittab脚本创建进程。
系统运行时,可以使用Init命令更改为新的运行级别。
例如,要在正在运行的系统上切换到单用户模式,我们将输入:
# init 1
或者重新启动系统:
# init 6
init的一种变体是telinit。
但是,/sbin/telinit
通常链接到/sbin/init
:
# ls -l /sbin/telinit lrwxrwxrwx 1 root root 4 May 14 2013 /sbin/telinit -> init
使用<em> shutdown </em>命令
即使认为我们可以使用init重启或者关闭系统,也建议您使用关闭程序。
使用init更改运行级别会立即更改新的运行级别,这对于连接有许多用户的系统可能是不合适的。
关机程序会向所有登录到系统的用户发送一条广播消息,从而使他们有时间在使用时间参数时保存更改。
# shutdown -r +5 "Please save your changes" Broadcast message from [email protected] (pts/0) (Mon Nov 11 20:46:15 2013): Please save your changes The system is going DOWN for reboot in 5 minutes!
如果我们安排了关机但又改变了主意,则可以使用-c选项取消它:
# shutdown -c "system restart cancelled"
Innittab条目格式<em>(供将来参考)</em>
回到/etc/inittab
,文件条目遵循一种简单的格式。
每行由四个冒号分隔的字段组成:
id:runlevels:action:process
id是1-4个字符的唯一序列,用于标识inittab中的条目。
运行级别字段包含此条目适用的运行级别列表。
例如,23表示该条目适用于运行级别2和3。
行动告诉初始化应采取的行动以及如何处理该过程。
例如,respawn告诉init在进程终止时重新启动它。
流程字段是要执行的流程,包括所需的任何选项和参数。
输入运行级别时,rc将start参数传递给名称以大写字母S开头的所有脚本,将stop参数传递给名称以大写字母K开头的所有脚本。
管理运行级别服务
更改系统运行级别相对容易,但是如果我们不知道如何添加或者删除应在一个或者另一个运行级别上启动的服务,则对我们没有多大帮助。
使用<em> chkconfig </em>
Chkconfig是用于启用/禁用系统服务的工具之一。
要在Debian上安装:
# apt-get install chkconfig
我们可以使用以下命令列出所有已知服务的运行级别配置:
# chkconfig -l
输出将显示所有七个运行级别中服务的状态。
要修改运行zabbix-agent服务的运行级别,我们可以使用如下命令:
# chkconfig --level 3 zabbix-agent on
要从所有运行级别中删除zabbix-agent服务:
# chkconfig --del zabbix-agent
使用<em> update-rc.d </em>
在Debian系统上使用update-rc.d命令来安装和删除System-V风格的初始化脚本链接。
一般用法如下:
# update-rc.d
一些可用的选项:
<strong>默认值</strong>:建立链接以在运行级别2-5中启动服务并在运行级别016中停止服务。
<strong>启用:</strong>如果未指定启动运行级别,则将停止链接重命名为所有启动运行级别中的启动链接。
<strong>禁用:</strong>如果未指定启动运行级别,则将启动链接重命名为所有启动运行级别中的停止链接。
<strong>删除:</strong>:删除/etc/rc{runlevel}.d/中目录中所有指向/etc/init.d/中脚本的链接。
除非您知道自己在做什么,否则请避免使用此选项。
下面的命令将在运行级别2-5上启用zabbix-agent服务:
# update-rc.d zabbix-agent enable
其他工具
在Debian系统上,也可以使用rcconf(Debian运行级别配置工具)配置运行级别。
Rcconf显示所有可以在启动时启动的服务的菜单。
启用的服务以星号(*)标记,只需切换单个服务,我们就可以将它们配置为打开和关闭。
另一个工具是ntsysv(尽管我很少使用),它是由Red Hat创建的,主要用于Red Hat和相关发行版。
最后但并非最不重要的一点是我最喜欢的一个-sysv-rc-conf。
它提供了一个易于使用的界面来管理/etc/rc {runlevel} .d /
符号链接。
该接口仅允许打开或者关闭服务,并允许对符号链接进行更精细的管理。
正如手册页所提示的那样,sysv-rc-conf可以替代前面提到的ntsysv或者rcconf之类的程序。