Linux服务管理
一、简介与分类
1.1系统的运行级别
linux有7个运行级别
运行级别 | 含义 |
---|---|
0 | 关机 |
1 | 单用户模式,可以想象成windows的安全模式,主要用于系统修复 |
2 | 不完全的命令行模式,不颔NFS服务q |
3 | 完全的命令行模式,就是标准字符界面 |
4 | 系统保留 |
5 | 图形模式 |
6 | 重启动 |
我们常用级别3或级别5,当比如忘记root密码等,可以进级别1进行修复。
1.2 运行级别命令
runlevel
:查看运行级别命令
[root@localhost ~]# runlevel
N 5
表示我们当前在5级别,第一个数字表示我们的前一个级别,我们一进入系统,便在5级别,所以显示为N(null)。
init
: 修改运行级别命令,比如init 0
进行关机,init 6
进行重启系统,当然这只是Linux重启、关机命令的一种方式。
那如何修改系统默认运行级别呢?,比如一开机就进入级别3.
vim /etc/inittab
id:3:initdefault:
修改后即能让系统开机后直接进入哪个运行级别,不过这点呢,在centos7中发生了变化,可自查。
2.服务的分类
我们知道,系统服务是在后台运行的应用程序,并且可以提供一些本地系统或网络的功能。我们把这些应用程序称作服务,也就是 Service
-
我们知道,Linux 中常见的软件包有两种:一种是 RPM 包;另一种是源码包。那么,通过 RPM 包安装的系统服务就是 RPM 包默认安装的服务(因为 Linux 光盘中全是 RPM 包,Linux 系统也是通过 RPM 包安装的,所以我们把 RPM 包又叫作系统默认包),通过源码包安装的系统服务就是源码包安装的服务。
源码包是开源的,自定义性强,通过编译安装更加适合系统,但是安装速度较慢,编译时容易报错。RPM 包是经过编译的软件包,安装更快速,不易报错,但不再是开源的。最主要的区别就是安装位置不同,源码包安装到我们手工指定的位置当中,而 RPM 包安装到系统默认位置当中(可以通过"rpm -ql 包名"命令查询)。也就是说,RPM 包安装到系统默认位置,可以被服务管理命令识别;但是源码包安装到手工指定位置,当然就不能被服务管理命令识别了(可以手工修改为被服务管理命令识别)。
RPM 包默认安装的服务。这些服务是通过 RPM 包安装的,可以被服务管理命令识别。
- 独立的服务:就是独立启动的意思,这种服务可以自行启动,而不用依赖其他的管理服务。因为不依赖其他的管理服务,所以,当客户端请求访问时,独立的服务响应请求更快速。目前,Linux 中的大多数服务都是独立的服务,如 apache 服务、FTP 服务、Samba 服务等。
- 基于 xinetd 的服务:这种服务就不能独立启动了,而要依靠管理服务来调用。这个负责管理的服务就是 xinetd 服务。xinetd 服务是系统的超级守护进程,其作用就是管理不能独立启动的服务。当有客户端请求时,先请求 xinetd 服务,由 xinetd 服务去唤醒相对应的服务。当客户端请求结束后,被唤醒的服务会关闭并释放资源。这样做的好处是只需要持续启动 xinetd 服务,而其他基于 xinetd 的服务只有在需要时才被启动,不会占用过多的服务器资源。但是这种服务由于在有客户端请求时才会被唤醒,所以响应时间相对较长。
源码包安装的服务。这些服务是通过源码包安装的,所以安装位置都是手工指定的。由于不能被系统中的服务管理命令直接识别,所以这些服务的启动与自启动方法一般都是源码包设计好的。每个源码包的启动脚本都不一样,一般需要查看说明文档才能确定。
注意:其中xinetd
服务已经在被逐步淘汰了。
查询已经安装的服务和区分服务
我们已经知道 Linux 服务的分类了,那么应该如何区分这些服务呢?首先要区分 RPM 包默认安装的服务和源码包安装的服务。源码包安装的服务是不能被服务管理命令直接找到的,而且一般会安装到 /usr/local/ 目录中。
也就是说,在 /usr/local/ 目录中的服务都应该是通过源码包安装的服务。RPM 包默认安装的服务都会安装到系统默认位置,所以是可以被服务管理命令(如 service、chkconfig)识别的。
其次,在 RPM 包默认安装的服务中怎么区分独立的服务和基于 xinetd 的服务?这就要依靠 chkconfig 命令了。chkconfig 是管理 RPM 包默认安装的服务的自启动的命令,这里仅利用这条命令的查看功能。使用这条命令还能看到 RPM 包默认安装的所有服务。命令格式如下:
[root@localhost ~]# chkconfig --list [服务名]
- --list:列出 RPM 包默认安装的所有服务的自启动状态;
例如:
[root@localhost ~]# chkconfig -list
#列出系统中RPM包默认安装的所有服务的自启动状态
abrt-ccpp 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
abrt-oops 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
…省略部分输出…
udev-post 0:关闭 1:启用 2:启用 3:启用 4:启用 5:启用 6:关闭
ypbind 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
这条命令的第一列为服务的名称,后面的 0~6 代表在不同的运行级别中这个服务是否开启时自动启动。这些服务都是独立的服务,因为它们不需要依赖其他任何服务就可以在相应的运行级别启动或自启动。但是没有看到基于 xinetd 的服务,那是因为系统中默认没有安装 xinetd 这个超级守护进程,需要我们手工安装。
3.服务与端口
如果知道了一台服务器的 IP 地址,我们就可以找到这台服务器。但是这台服务器上有可能搭建了多个网络服务,比如 WWW 服务、FTP 服务、Mail 服务,那么我们到底需要服务器为我们提供哪个网络服务呢?这时就要靠端口(Port)来区分了,因为每个网络服务对应的端口都是固定的。
比如,WWW 服务对应的端口是 80,FTP 服务对应的端口是 20 和 21,Mail 服务对应的端口是 25 和 110。也就是说,IP 地址可以想象成"门牌号码",而端口可以想象成"家庭成员",找到了 IP 地址只能找到你们家,只有找到了端口,寄信时才能找到真正的收件人。
计算机中的协议主要分为两大类:
- 面向连接的可靠的TCP协议(Transmission Control Protocol,传输控制协议);
- 面向无连接的不可靠的UDP协议(User Datagram Protocol,用户数据报协议);
这两种协议都支持 216,也就是 65535 个端口。这么多端口怎么记忆呢?系统给我们提供了服务与端口的对应文件 /etc/services。
查询系统中已经启动的服务
既然每个网络服务对应的端口是固定的,那么是否可以通过查询服务器中开启的端口,来判断当前服务器开启了哪些服务?
当然是可以的。虽然判断服务器中开启的服务还有其他方法(如通过ps命令),但是通过端口的方法查看最为准确。命令格式如下:
[root@localhost ~]# netstat 选项
[root@localhost ~]# netstat -tlunp
选项:
- -a:列出系统中所有网络连接,包括已经连接的网络服务、监听的网络服务和 Socket 套接字;
- -t:列出 TCP 数据;
- -u:列出 UDP 数据;
- -l:列出正在监听的网络服务(不包含已经连接的网络服务);
- -n:用端口号来显示而不用服务名;
- -p:列出该服务的进程 ID (PID);
二、RPM包服务管理
1.1 独立服务的管理
独立服务的启动
- 使用/etc/init.d/目录中的启动脚本来启动独立的服务
[root@localhost ~]#/etc/init.d独立服务名 start| stop|status|restart|...
- 使用service命令来启动独立的服务
[root@localhost ~]# service 独立服务名 start|stop|restart|...
独立服务的自启动
独立服务的自启动方法有三种:
- 使用chkconfig服务自启动管理命令
[root@localhost ~]# chkconfig [--level 运行级别][独立服务名][on|off]
#选项:--level: 设定在哪个运行级别中开机自启动(on),或者关闭自启动(off);
使用 chkconfig --list
命令可以查看所有 RPM 包默认安装服务的自启动状态
aegis 0:off 1:off 2:on 3:on 4:on 5:on 6:off
agentwatch 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
现在我们来设置Mysql在2345级别时不自启动
[root@helius ~]# chkconfig --level 2345 mysql off
[root@helius ~]# chkconfig --list
aegis 0:off 1:off 2:on 3:on 4:on 5:on 6:off
agentwatch 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mysql 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- 修改/etc/rc.d/rc.local文件,设置服务自启动
第二种方法就是修改 /etc/rc.d/rc.local 文件,在文件中加入服务的启动命令。这个文件是在系统启动时,在输入用户名和密码之前最后读取的文件(注意:/etc/rc.d/rc.loca和/etc/rc.local 文件是软链接,修改哪个文件都可以)。这个文件中有什么命令,都会在系统启动时调用。
如果我们把服务的启动命令放入这个文件,这个服务就会在开机时自启动。命令如下:
[root@localhost ~]#vi /etc/rc.d/rc.local
#!/bin/sh
#
#This script will be executed *after* all the other init scripts.
#You can put your own initialization stuff in here if you don't want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/etc/rc.d/init.d/httpd start
#在文件中加入apache的启动命令
这样,只要重启之后,apache 服务就会开机自启动了。推荐大家使用这种方法管理服务的自启动,有两点好处:
- 第一,如果大家都采用这种方法管理服务的自启动,当我们碰到一台陌生的服务器时,只要查看这个文件就知道这台服务器到底自启动了哪些服务,便于集中管理。
- 第二,chkconfig 命令只能识别 RPM 包默认安装的服务,而不能识别源码包安装的服务。 源码包安装的服务的自启动也是通过 /etc/rc.d/rc.local 文件实现的,所以不会出现同一台服务器自启动了两种安装方法的同一个服务。
- 还要注意一下,修改 /etc/rc.d/rc.local 配置文件的自启动方法和 chkconfig 命令的自启动方法是两种不同的自启动方法。所以,就算通过修改 /etc/rc.d/rc.local 配置文件的方法让某个独立的服务自启动了,执行"chkconfig --list"命令并不到有什么变化。
推荐使用 /etc/rc.d/rc.local 文件来管理服务的自启动
- 使用ntsysv命令管理自启动
我们使用ntsysv命令更改服务的自启动状态后,在第一种方式下,也可以看到相同的效果。
# ntsysv [--level 运行级别]件来管理服务的自启动。
--level 运行级别:可以指定设定自启动的运行级别;
它是红帽系列 Linux 的专有命令,其他的 Linux 发行版本不一定拥有这条命令,而且条命令也不能管理源码包安装的服务
1.2 基于xinetd服务的管理
已被逐步淘汰,故略过。
三、源码包服务管理
源码包服务的启动管理
源码包服务中所有的文件都会安装到指定目录当中,并且没有任何垃圾文件产生(Linux 的特性)(删除目录即完整卸载),所以服务的管理脚本程序也会安装到指定目录中。源码包服务的启动管理方式就是在服务的安装目录中找到管理脚本,然后执行这个脚本。
问题来了,每个服务的启动脚本都是不一样的,我们怎么确定每个服务的启动脚本呢?还记得在安装源码包服务时,我们强调需要査看每个服务的说明文档吗(一般是 INSTALL 或 READEM)?在这个说明文档中会明确地告诉大家服务的启动脚本是哪个文件。
比如我本机的zookeeper
我是将源码包安装在/opt/zookeeper目录下,进入bin目录,
绿色的都是可执行脚本。
源码包服务的启动方法就这一种,比 RPM 包默认安装的服务要简单一些。
找到源码包的安装位置,参考相关配置文件,或者文档说明,找到他的启动脚本,执行即可。
源码包服务的自启动管理
源码包服务的白启动管理也不能依靠系统的服务管理命令,而只能把标准启动命令写入 /etc/rc.d/rc.local 文件中。系统在启动过程中读取 /etc/rc.d/rc.local 文件时,就会调用源码包服务的启动脚本,从而让该服务开机自启动。命令如下:
[root@localhost ~]# vi /etc/rc.d/rc.local
#修改自启动文件
#!/bin/sh
#This script will be executed *after* all the other init scripts.
#You can put your own initialization stuff in here if you don11
#want to do the full Sys V style init stuff.
touch /var/lock/subsys/local /usr/local/apache2/bin/apachectl start
#加入源码包服务的标准启动命令,保存退出,源码包安装的apache服务就被设为自启动了
让源码包服务被服务管理命令识别
这个步骤在开发中我们是经常做的啦,不过其实不推荐这么做,,因为这会让本来区别很明确的源码包服务和 RPM 包服务变得容易混淆,不利于系统维护和管理。
四、服务管理总结
Linux中常见的服务列表:
服务名称 | 功能简介 | 建议 |
---|---|---|
acpid | 电源管理接口。如果是笔记本电脑用户,则建议开启,可以监听内核层的相关电源事件 | 开启 |
anacron | 系统的定时任务程序。是 cron 的一个子系统,如果定时任务错过了执行时间,则可以通过 anacron 继续唤醒执行 | 关闭 |
alsasound | alsa 声卡驱动。如果使用 alsa 声卡,则开启 | 关闭 |
apmd | 电源管理模块。如果支持 acpid,就不需要 apmd,可以关闭 | 关闭 |
atd | 指定系统在特定时间执行某个任务,只能执行一次。如果需要则开启,但我们一般使用 crond 来执行循环定时任务 | 关闭 |
auditd | 审核子系统。如果开启了此服务,那么 SELinux 的审核信息会写入 /var/log/audit/ audit.log 文件;如果不开启,那么审核信息会记录在 syslog 中 | 开启 |
autofs | 让服务器可以自动挂载网络中其他服务器的共享数据,一般用来自动挂载 NFS 服务。如果没有 NFS 服务,则建议关闭 | 关闭 |
avahi-daemon | avahi 是 zeroconf 协议的实现,它可以在没有 DNS 服务的局域网里发现基于 zeroconf 协议的设备和服务。除非有兼容设备或使用 zeroconf 协议,否则关闭 | 关闭 |
bluetooth | 蓝牙设备支持。一般不会在服务器上启用蓝牙设备,关闭它 | 关闭 |
capi | 仅对使用 ISND 设备的用户有用 | 关闭 |
chargen-dgram | 使用 UDP 协议的 chargen server。其主要提供类似远程打字的功能 | 关闭 |
chargen-stream | 同上 | 关闭 |
cpuspeed | 可以用来调整 CPU 的频率。当闲置时,可以自动降低 CPU 频率来节省电量 | 开启 |
crond | 系统的定时任务,一般的 Linux 服务器都需要定时任务来协助系统维护。建议开启 | 开启 |
cvs | 一个版本控制系统 | 关闭 |
daytime-dgram | 使用 TCP 协议的 daytime 守护进程,该协议为客户机实现从远程服务器获取日期和时间的功能 | 关闭 |
daytime-slream | 同上 | 关闭 |
dovecot | 邮件服务中 POP3/IMAP 服务的守护进程,主要用来接收信件。如果启动了邮件服务则开启:否则关闭 | 关闭 |
echo-dgram | 服务器回显客户服务的进程 | 关闭 |
echo-stream | 同上 | 关闭 |
firstboot | 系统安装完成后,有一个欢迎界面,需要对系统进行初始设定,这就是这个服务的作用。既然不是第一次启动了,则建议关闭 | 关闭 |
gpm | 在字符终端 (ttyl~tty6) 中可以使用鼠标复制和粘贴,这就是这个服务的功能 | 开启 |
haldaemon | 检测和支持 USB 设备。如果是服务器则可以关闭,个人机则建议开启 | 关闭 |
hidd | 蓝牙鼠标、键盘等蓝牙设备检测。必须启动 bluetooth 服务 | 关闭 |
hplip | HP 打印机支持,如果没有 HP 打印机则关闭 | 关闭 |
httpd | apache 服务的守护进程。如果需要启动 apache,就开启 | 开启 |
ip6tables | IPv6 的防火墙。目前 IPv6 协议并没有使用,可以关闭 | 关闭 |
iptables | 防火墙功能。Linux 中的防火墙是内核支持功能。这是服务器的主要防护手段,必须开启 | 开启 |
irda | IrDA 提供红外线设备(笔记本电脑、PDA’s、手机、计算器等)间的通信支持。建议关闭 | 关闭 |
irqbalance | 支持多核处理器,让 CPU 可以自动分配系统中断(IRQ),提高系统性能。目前服务器多是多核 CPU,请开启 | 开启 |
isdn | 使用 ISDN 设备连接网络。目前主流的联网方式是光纤接入和 ADSL,ISDN 己经非常少见,请关闭 | 关闭 |
kudzu | 该服务可以在开机时进行硬件检测,并会调用相关的设置软件。建议关闭,仅在需要时开启 | 关闭 |
lvm2-monitor | 该服务可以让系统支持LVM逻辑卷组,如果分区采用的是LVM方式,那么应该开启。建议开启 | 开启 |
mcstrans | SELinux 的支持服务。建议开启 | 开启 |
mdmonitor | 该服务用来监测 Software RAID 或 LVM 的信息。不是必需服务,建议关闭 | 关闭 |
mdmpd | 该服务用来监测 Multi-Path 设备。不是必需服务,建议关闭 | 关闭 |
messagebus | 这是 Linux 的 IPC (Interprocess Communication,进程间通信)服务,用来在各个软件中交换信息。建议关闭 | 关闭 |
microcode _ctl | Intel 系列的 CPU 可以通过这个服务支持额外的微指令集。建议关闭 | 关闭 |
mysqld | MySQL 数据库服务器。如果需要就开启;否则关闭 | 开启 |
named | DNS 服务的守护进程,用来进行域名解析。如果是 DNS 服务器则开启;否则关闭 | 关闭 |
netfs | 该服务用于在系统启动时自动挂载网络中的共享文件空间,比如 NFS、Samba 等。 需要就开启,否则关闭 | 关闭 |
network | 提供网络设罝功能。通过这个服务来管理网络,建议开启 | 开启 |
nfs | NFS (Network File System) 服务,Linux 与 Linux 之间的文件共享服务。需要就开启,否则关闭 | 关闭 |
nfslock | 在 Linux 中如果使用了 NFS 服务,那么,为了避免同一个文件被不同的用户同时编辑,所以有这个锁服务。有 NFS 时开启,否则关闭 | 关闭 |
ntpd | 该服务可以通过互联网自动更新系统时间.使系统时间永远准确。需要则开启,但不是必需服务 | 关闭 |
pcscd | 智能卡检测服务,可以关闭 | 关闭 |
portmap | 用在远程过程调用 (RPC) 的服务,如果没有任何 RPC 服务,则可以关闭。主要是 NFS 和 NIS 服务需要 | 关闭 |
psacct | 该守护进程支持几个监控进程活动的工具 | 关闭 |
rdisc | 客户端 ICMP 路由协议 | 关闭 |
readahead_early | 在系统开启的时候,先将某些进程加载入内存整理,可以加快启动速度 | 关闭 |
readahead_later | 同上 | 关闭 |
restorecond | 用于给 SELinux 监测和重新加载正确的文件上下文。如果开启 SELinux,则需要开启 | 关闭 |
rpcgssd | 与 NFS 有关的客户端功能。如果没有 NFS 就关闭 | 关闭 |
rpcidmapd | 同上 | 关闭 |
rsync | 远程数据备份守护进程 | 关闭 |
sendmail | sendmail 邮件服务的守护进程。如果有邮件服务就开启;否则关闭 | 关闭 |
setroubleshoot | 该服务用于将 SELinux 相关信息记录在日志 /var/log/messages 中。建议开启 | 开启 |
smartd | 该服务用于自动检测硬盘状态。建议开启 | 开启 |
smb | 网络服务 samba 的守护进程。可以让 Linux 和 Windows 之间共享数据。如果需要则开启 | 关闭 |
squid | 代理服务的守护进程。如果需要则开启:否则关闭 | 关闭 |
sshd | ssh 加密远程登录管理的服务。服务器的远程管理必须使用此服务,不要关闭 | 开启 |
syslog | 日志的守护进程 | 开启 |
vsftpd | vsftp 服务的守护进程。如果需要 FTP 服务则开启;否则关闭 | 关闭 |
xfs | 这是 X Window 的字体守护进程,为图形界面提供字体服务。如果不启动图形界面,就不用开启 | 关闭 |
xinetd | 超级守护进程。如果有依赖 xinetd 的服务,就必须开启 | 开启 |
ypbind | 为 NIS (网络信息系统)客户机激活 ypbind 服务进程 | 关闭 |
yum-updatesd | yum 的在线升级服务 | 关闭 |
参考连接: