系统服务管理
小知识:服务是指操作系统中提供指定功能的程序或进程。服务也是一种应用程序,不同的是服务一般只在后台运行,且服务的对象一般是本地系统或网络中的主机和用户。
一、查看系统服务
Linux系统中存在许多服务,按服务对象不同,通常可以分为本地系统服务和网络服务两类。本地系统服务主要用于支撑本地系统运行,例如打印、网络支持、防火墙服务、蓝牙支持服务等。网络服务通常用于对网络中的用户或主机提供服务,例如Web应用服务、代理服务、FTP、数据库服务等。
无论何种服务,在Linux系统中都可以设置为在一个或多个特定的运行级别中自动启动,即当系统进入某个指定的运行级别时,会自动运行设置在该级别中的服务。管理这些服务的第1步是查看系统中的服务。
查看Linux系统中的服务列表,可以使用命令chkconfig。该命令可以用于查看服务的自启动状态,也可用于设置服务的启动状态。
【命令格式】
chkconfig –list [name]
【用法示例】
chkconfig命令可以查看单一服务的自启动状态,也可以用于查询系统中的服务列表。
(1)查询系统防火墙服务iptables的自启动状态:
[root@localhost home]# chkconfig --list iptables iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
注意:使用选项list和服务名称查看服务时,必须使用服务的全名,否则无法查到结果。
(2)如果不使用服务名称参数,命令会列出系统中所有服务:
#独立服务的自启动状态 [root@localhost home]# chkconfig --list NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off NetworkManagerDispatcher 0:off 1:off 2:off 3:off 4:off 5:off 6:off acpid 0:off 1:off 2:off 3:on 4:on 5:on 6:off anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off apmd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ... #以下为非独立服务的启动状态 xinetd based services: chargen-dgram: off chargen-stream: off cvs: off daytime-dgram: off ...
说明:像上面命令中输出的那样,在每个运行级别中都可以设置自启动状态的服务称为独立服务。命令输出的最后几个服务是一些老式的服务集,现在已经很少有人使用这些服务。这些服务集的运行状态,依赖于一个名为xinetd的服务。通常将这些依赖于xinetd得到服务称为非独立服务。非独立服务受xinetd服务管理,因此如果要启动这些服务,首先应该启动xinetd。
(3)有时可能会忘记一些服务的具体名称,也可能只记得服务名称的一部分,这时可以将chkconfig命令与grep命令一起配合使用:
例如要查询服务名称中含有nfs的服务列表:
[root@localhost home]# chkconfig --list | grep nfs nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
二、设置服务自启动状态
【命令格式】
chkconfig [--level <levels>] <name> <on|off>
在上面的命令格式中,尖括号<>中的内容表示必须使用的参数。如果使用了选项level,必须为参数指定运行级别列表,并且设置自启动状态必须指定服务名称和启动状态。
【用法示例】
使用命令chkconfig既可以设置独立服务的自启动状态,也可以设置非独立服务的自启动状态。
(1)设置独立服务系统防火墙的自启动状态为关闭:
[root@localhost home]# chkconfig iptables off [root@localhost home]# chkconfig --list iptables iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
(2)如果要设置开启防火墙:
[root@localhost home]# chkconfig iptables on [root@localhost home]# chkconfig --list iptables iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
这是防火墙将会在运行级别为2,3,4,5时自动启动。
(3)从(1)(2)中可以看出,设置服务为开启状态时,命令默认将其设置为运行级别2,3,4,5为开启。设置服务关闭时,默认设置为所以运行级别关闭。显然这个默认设置并不适用于所有用户和服务,这是可以使用选项level指定运行级别列表。
例如设置系统防火墙在运行级别3,5中自动启动:
[root@localhost home]# chkconfig --level 35 iptables on [root@localhost home]# chkconfig --list iptables iptables 0:off 1:off 2:off 3:on 4:off 5:on 6:off
(4)对于非独立服务而言,由于没有运行级别这个概念,因此不能使用level选项指定运行级别列表,可以直接设置这些服务的状态。
例如要将telnet服务设置为开机自启动:
[root@localhost home]# chkconfig telnet on [root@localhost home]# chkconfig --list telnet telnet on
由于非独立服务受服务xinetd的管理,因此还应该将xinetd设置为自动启动:
[root@localhost home]# chkconfig --level 345 xinetd on [root@localhost home]# chkconfig --list xinetd xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
注意:虽然可以使用chkconfig命令设置非独立服务的自启动状态,但这并不能让所有非独立服务启动。有些非独立服务可能还需要手动修改其配置文件,这样xinetd服务启动后才能启动这些非独立服务。
(5)Red Hat 的发行版中,通常还可以使用工具ntsysv设置服务的自启动状态。
三、添加、删除系统服务
chkconfig命令不仅可以查看、设置服务的自启动状态,还可以添加系统服务(前提条件是有可供使用的运行级别脚本,就像/etc/init.d/目录下的那些脚本)。
【命令格式】
chkconfig –add <name>
chkconfig –del <name>
【用法示例】
要添加系统服务,首先需要将运行级别脚本拷贝到系统服务脚本目录/etc/init.d/中。
此处将以MySQL 5.1.55源码包中提供的运行级别脚本为例,演示如何添加、删除系统服务。
(1)MySQL 5.1.55编译安装完成后,可以复制源码目录中的support-files/mysql.server至系统服务脚本目录/etc/init.d,重命名为mysqld,并使用chmod为其添加可执行权限。完成此步骤后,chkconfig就能自动检测到新加入的运行级别脚本了。
(2)此时可以使用chkconfig命令将MySQL的运行级别脚本添加为系统服务:
# chkconfig --add mysqld
(3)从系统中移除MySQL后,还需要将其系统服务也一并移除,以免产生不必要的错误:
# chkconfig --del mysqld
如果确认再不需要使用服务的运行脚本,可以使用rm命令将其运行脚本删除。
注意:并不是所有发行版都支持chkconfig命令。
四、启动和关闭服务命令service
在系统运行状态时启动和关闭某个服务。
【命令格式】
service name [start|stop|restart]
有些服务也可以使用save(保存)和reload(重新载入配置文件)等动作。
【用法示例】
(1)例如要关闭系统防火墙iptables:
[root@localhost ~]# service iptables stop #由于系统防火墙以模块的形式加载到系统中(不同于其他服务),因此关闭时,也卸载了相关模块 Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ] [root@localhost ~]# service iptables status Firewall is stopped.
(2)有时修改了服务的配置文件,希望以新的配置文件运行服务,这是可以使用restart参数让服务重新启动,以重新读取配置文件。
例如管理员通过修改配置文件的方法重新设置网络接口卡的IP地址等信息,并希望系统网络重新启动:
[root@localhost ~]# service network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: Determining IP information for eth0... done. [ OK ]
执行上面的命令后,系统会先关闭网络支持服务network,然后再读取配置文件,并用新的配置文件启动网络接口。
(3)然而有些发行版不支持service命令,由于服务的启动脚本都放在目录/etc/init.d中,因此可以使用手动运行的方式执行启动脚本:
例如要启动系统计划任务服务crond:
[root@localhost ~]# /etc/init.d/crond start
Starting crond: [ OK ]
(4)许多服务除了启动、停止和重启之外,还有一些其他动作,如保存、重新载入配置文件等(并非所有服务都支持这些动作)。
例如要保存系统防火墙规则:
[root@localhost ~]# service iptables save
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]