最近做项目,要检测某个系统服务是否配置为开机启动。因此,对涉及的内容在此做一些整理。
1、Linux运行级别
参考资料[1]告诉我们,Linux有7个运行级别,使用runlevel命令可以查看当前的运行级别和之前的运行级别。如下图所示。
由上图可见,可见Ubuntu系统默认的运行级别是2,之前的运行级别是N。那是因为刚启动系统,还没有切换过运行级别,因此使用N表示没有!另外,我在omapl138进行测试的时候,发现它的默认的运行级别是5。也就是说,不同的系统,可以配置不同的默认级别。但是0、6这个两个级别不能设为默认值,具体参见参考资料[1]。
而要切换到特定的运行级别,使用init命令。例如init 0和init 6分别实现关机和重启系统!如下图所示。
对于参考资料[1]提到的/etc/rc.d目录,我使用的ubuntu10.04和广州创电子科技有限公司omapl138开发板配置的Linux系统都没有,而实际上,rc0.d、rc1.d、rc2.d...rc6.d、rc.local、init.d都在/etc目录中!因此在阅读过程中,自动将rc.d忽略即可(根据参考资料[8][9][10]的提示可知,/etc/rc.d是Redhat版本的系统中的目录,由此可见,虽然都是Linux系统,但是各个发行版的目录结构都是有差异的)。
最后,关于运行等级,可以查看系统的/etc/inittab文件(Ubuntu10.04没有这个文件!),详见参考资料[8]。
2、/etc/rc?.d目录实验
参考资料[1]说,当Linux系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件(rcN.d中的都是链接文件),对于以K开头的文件,系统将终止对应的服务,对于以S开头的文件,系统将启动对应的服务。那么,如何检验呢?
根据参考资料[2]的提示,我们可以在/etc/init.d目录中建一个shell脚本,这里我将其命名为init_test, 可执行。主要的目的是在标准输出上显示一句话,内容如下图所示:
再根据参考资料[2]的提示,在/etc/rc5.d目录中创建一个到/etc/init.d/init_test的软链接,名为S88init_test(以S开头,88为随便写的),如下图所示:
准备好之后,就使用init命令,将系统的运行级别切换到5(原来的运行级别为2),如下图:
由上图可见,什么反应都没有!那么,是不是参考资料[1]的说法有误呢?
不到黄河不死心,决定改变1中方法来试试。将/etc/init.d/init_test的内容改为:
上面内容的主要目的是在/home目录中创建一个文件file_create_by_init_test,并且往里面写“I am /etc/init.d/init_test”。
下面进行测试,先将运行级别切换到2,然后再切换到5,如下图:
然查看/home目录下是否创建了文件file_create_by_init_test,如下图:
由上图可见,果真在/home目录下创建了一个file-create_by_init_test文件!那么其内容对不对呢?可以查看一下:
由上图可见,file_create_by_init_test的内容和/etc/init.d/init_test中echo命令要显示的内容一致!
实验是检验真理的唯一标准,经过实验检验,参考资料[1]说的没有错。但是有一点要指出的是,我使用的Ubuntu系统,没有参考资料[1][2]中所说的/etc/rc.d目录,这在上面1已经说过。
3、检测开机启动的服务
方法一:chkconfig
根据参考资料[1]的提示,我们可以使用chkconfig工具来检测系统服务,例如:
需要注意的是,chkconfig并不是系统默认配置的,需要自己下载安装。
方法二:ps
使用ps命令可以输出当前运行的进程,结合grep命令,可以确定某个程序是否正在运行中,如下图所示,查看tftp服务是否已经启动:
方法三:检测/etc/rc?.d
网上有人提出,使用检查rc?.d目录的方式来查看开机启动的服务,尝试如下:
由上图可见,在rc?.d目录中并没有找到tftp的有关信息,但是使用方法一的方式却可以发现当前tftp服务是开启的,如下图:
由此可见,使用检测/etc/rc?.d的方式并不可行。
参考资料
[1]Linux系统有7个运行级别(runlevel)
[2]linux自定义开机启动服务和chkconfig使用方法。
[3]Linux开机启动十步骤
[4]Linux开机启动服务
[5]linux系统服务
[6]Linux系统服务及其配置
[7]Linux下如何将服务注册为系统服务
[8]Ubuntu中的inittab文件
[9]探讨ubuntu启动过程,init进程启动后为什么没有inittab文件?
[10]OS:Ubuntu 10.04 LTS 启动过程
[11]ubuntu 10.04 启动过程