chkconfig命令详解

  • 使用语法:

  chkconfig [--add][--del][--list][系统服务或 chkconfig [--level <等级代号>][系统服务][on/off/reset]

  chkconfig在没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回true,否则返回false。如果在服务名后面指定了onoff或者reset,那么chkconfi 会改变指 定服务的启动信息。onoff分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。onoff开关,系统默认只对运行级345有效,但是reset可以对所有运行级有效。

  • 使用参数:

    chkconfig --list [name]:显示所有运行级系统服务的运行状态信息(onoff)。如果指定了name,那么只显示指定的服务在不同运行级的状态。
    chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。
    chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。
    chkconfig [--level levels] name:设置某一服务在指定的运行级是被启动,停止还是重置。

  • 使用范例:

  chkconfig --list        #列出所有的系统服务
  chkconfig --add httpd        #增加httpd服务
  chkconfig --del httpd        #删除httpd服务
  chkconfig --level httpd 2345 on        #设置httpd在运行级别为2345的情况下都是on(开启)的状态
  chkconfig --list        #列出系统所有的服务启动情况
  chkconfig --list mysqld        #列出mysqld服务设置情况
  chkconfig --level 35 mysqld on        #设定mysqld在等级35为开机运行服务,--level 35表示操作只在等级35执行,on表示启动,off表示关闭
  chkconfig mysqld on        #设定mysqld在各等级为on各等级包括2345等级

 

  • chkconfig命令的原理:
[root@BASE ~]# ll /etc/init.d

lrwxrwxrwx. 1 root root 11 Jun 13 21:10 /etc/init.d -> rc.d/init.d

[root@BASE ~]# 

当我们将服务的启动脚本放到/etc/init.d这个目录的时候,其实是放在了rc.d/init.d中

[root@BASE ~]# ll /etc/rc.d/

total 60

drwxr-xr-x. 2 root root  4096 Sep 23 21:51 init.d

-rwxr-xr-x. 1 root root  2617 Nov 23  2013 rc

-rwxr-xr-x. 1 root root   220 Sep  8 09:18 rc.local

-rwxr-xr-x. 1 root root 19688 Nov 23  2013 rc.sysinit

drwxr-xr-x. 2 root root  4096 Sep 27 10:56 rc0.d

drwxr-xr-x. 2 root root  4096 Sep 27 10:56 rc1.d

drwxr-xr-x. 2 root root  4096 Sep 27 10:56 rc2.d

drwxr-xr-x. 2 root root  4096 Sep 27 10:56 rc3.d    

drwxr-xr-x. 2 root root  4096 Sep 27 10:56 rc4.d

drwxr-xr-x. 2 root root  4096 Sep 27 10:56 rc5.d

drwxr-xr-x. 2 root root  4096 Sep 27 10:56 rc6.d

[root@BASE ~]# 

rc1-6.d这些目录对应的是不同的运行级别,系统在开机的时候会加载这些目录中的文件,来实现在不同的级别是否启动服务。

 

[root@BASE ~]# ll /etc/rc.d/rc2.d/

total 0

lrwxrwxrwx. 1 root root 16 Jun 13 21:13 K01smartd -> ../init.d/smartd

lrwxrwxrwx  1 root root 13 Jun 18 11:57 K05atd -> ../init.d/atd

lrwxrwxrwx. 1 root root 16 Jun 13 21:13 K10psacct -> ../init.d/psacct

lrwxrwxrwx. 1 root root 19 Jun 13 21:12 K10saslauthd -> ../init.d/saslauthd

lrwxrwxrwx. 1 root root 18 Jun 13 21:13 K15svnserve -> ../init.d/svnserve

lrwxrwxrwx  1 root root 19 Jun 18 11:57 K16abrt-ccpp -> ../init.d/abrt-ccpp

........

lrwxrwxrwx  1 root root 17 Aug 21 14:34 S13rpcbind -> ../init.d/rpcbind

lrwxrwxrwx. 1 root root 14 Jun 13 21:13 S55sshd -> ../init.d/sshd

lrwxrwxrwx  1 root root 16 Sep 27 10:56 S64mysqld -> ../init.d/mysqld

lrwxrwxrwx. 1 root root 15 Jun 13 21:12 S90crond -> ../init.d/crond

lrwxrwxrwx. 1 root root 11 Jun 13 21:12 S99local -> ../rc.local

当将某一个服务设置为开机启动的时候,系统会自动创建一个软连接来指向rc.d/init.d中该服务的启动脚本,所以如果想使用chkconfig来管理服务的开机启动的时候必须先要将服务的启动脚本放到rc.d/init.d中去。

如果将某一个服务设置为2级别on,系统就会在/etc/rc.d/rc2.d/中创建一个以S开头的软连接,如果设置为off,就会创建一个以K开头连接文件。

  • 原理演示:

Mysqld服务在2级别是开启的

[root@BASE ~]# chkconfig|grep mysql

mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

rc2.d目录中将mysqld的软连接删除。

[root@BASE ~]# rm /etc/rc.d/rc2.d/S64mysqld 

可以看到mysqld服务在2级别的变为为off

[root@BASE ~]# chkconfig|grep mysql         

mysqld          0:off   1:off   2:off   3:on    4:on    5:on    6:off

[root@BASE ~]# 

 如何设置脚本使其能够通过chkconfig管理

需要在脚本中(往往在脚本的开头)加上如下的内容

#chkconfig: 2345 21 60

  2345 表示默认的都在那个级别开机启动

  21 表示启动顺序

  60 表示关闭的顺序

   提示:在设置顺序的时候注意不要和之前的软件冲突,同时要注意依赖软件的之间的先后顺序,例如nfs和rpcbind。

原文地址:https://www.cnblogs.com/along1226/p/4842043.html