1、实验环境
公司在文件服务器中新安装了CentOS系统.由于默认启动的服务程序较多,系统运行缓慢。现需要对系绞服务进行适当优化,减少一些不必要的自启动服务.并设置系统在开机后直接进入字符模式。
2、需求描述
根据实际使用需求对CentOS 7操作系统中的系统服务进行优化
3、推荐步骤
- 设置Linux操作系统每次开机后自动进入字符模式界面
- 使用ntsysv工具同时调整2.3.4.5运行级别中的服务状态,关闭下列服务:atd、bluetooth、mdmonitor、rhnsd、rpcgssd、postfix。
- 使用systemctl工具调整个别服务的启动状态。
- 将netwark服务、postfix服务在当前的target中设置为启动状态。
- 查看当前系统中内存占用情况.重启并登录到字符模式,再次查看内存占用情况。
- 使用init命令切换到图形模式,再次确认运行目标并查看内存占用情况,比较优化服务前后及在不同运行级别中的差异。
4、实验步骤
4.1、查看系统target
早期Linux操作系统中的SysVinit 机制.默认包括七种不同的服务搭配方式,其中每一种搭配方式称为运行级别.类似于 Windows系统中的正常启动、安全模式、不带网络连接的安全模式等,这些运行级别分别使用数字0,1,....6来表示。为了向下兼容SysVinit系统,Systend使用了相应的target (目标)模拟了SysVinit的运行级别.表1-2中列出了运行级别所对应的target,并说明了各种target的含义及用途。
表1-2 Systemd的目标与SysVinit的运行级别
|------|-------------------|-----------------------------|
| 运行级别 | Systemd的target | 说明 |
| 0 | target | 关机状态,使用该级别时将会关闭主机 |
| 1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
| 2 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
| 3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
| 4 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
| 5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
| 6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
明确当前系统所在的 target 将有助于管理员排除一些应用故障。若未能确知当前所处的目标,可以直接执行"runlevel"命令进行查询,显示结果中的两个字符分别表示切换前的目标,当前的目标,若之前尚未切换过运行级别.则第1列将显示"N",命令如下:
[root@blab ~]# runlevel
N 5
若用户想查看系统启动时默认运行的target,可以执行"systemctl get-default"命令以显示系统默认的 target,命令如下:
[root@blab ~]# systemctl get-default
graphical.target
4.2、切换系统的target
当用户需要将系统转换为其他的target时,可以通过传统的init程序进行.只要使用与运行级别相对应的数字(0~6)作为命令参数即可,或者使用systemctl命令进行目标切换。例如.为了节省系统资源,将系统运行的target由图形模式(5)切换为字符模式(3),可以执行"init 3"或"systematlisolate multi-user , target命令,命令如下:
[root@blab ~]# init 3
[root@blab ~]# runlevel
5 3
或者
[root@blab ~]# systemctl isolate multi-user.target
将系统切换到字符模式以后,图形桌面环境不再可用。这时按Alt+F7组合键也无法恢复图形桌面环境。需要再次使用图形桌面时,可以执行"init5"或者"systemctl isolate graphical target"命令切换回去。
4.3、使用ntsysv工具
Linux操作系统在每次开机后会进入默认的systemd运行目标(如字符模式或图形模式).并运行该目标中默认设为启动的各种系统服务。若要禁止某些系统服务自动运行,可以使用ntsysv或者systemctl工具进行优化。
4.3.1、使用ntsysv工具
ntsysv 工具可以在字符模式中运行,为用户提供一个仿图形的交互式操作界面,专门用于集中配置各种系统服务的启动状态。当需要同时设置多个服务的启动状态时.使用ntsysv工具会非常方便。
单独执行"ntsysv"命令时仅用于管理当前运行目标中的服务;通过"--level"选项可以对指定运行目标(级别)中的服务进行管理。例如,执行"ntsysv --level 35"命令可以打开 ntsysv管理程序,如图1.11所示,同时对运行目标3.5中的各种系统服务的默认启动状态进行调整。
[root@blab ~]# ntsysv
操作时按↑.↓方向键来选择不同的系统服务.按Space(空格)键设置服务的默认启动状态("[*]"表示启动."[]"表示关闭)。如果要查看所选定服务的说明信息,按F1键可以获取帮助.
4.4、使用systemctl工具调整个别服务的启动状态
systemctl工具与ntsysv的功能类似,但是systemctl不提供交互式的操作界面,它用于查询或设置系统服务的默认启动状态。当需要设置某一个服务在当前运行目标中的默认启动状态时,使用systemctl工具会更有效率。使用 systemctl工具控制服务开机启停的命令格式如下:
systemctl [控制选项] [服务名称]
常用的选项有以后几种:
- enable:开机自动启动
- disable:开机自动关闭
- is-enable:查看开机启动状态
- start(启动):运行指定的系统服务程序,实现服务功能
- stop(停止):终止指定的系统服务程序,关闭相应的功能
- restart(重启):先退出,再重新运行指定的系统服务程序
- reload(重载):不退出服务程序,只刷新配置。在某些服务中与restart的操作相同
- status(查看状态):查看指定的系统服务的运行状态及相关信息。
例如.执行以下操作即可配置apache服务开机自动启动或关闭并查看开机启动状态。当 apache服务设置为开机自动启动时.在/etc/systemd/system/multi---user, target , wants/目录下面会出现一个文件名为 httpd,service的软连接文件.当apache 服务设置为开机自动关闭时,在/etc/systend/system /multi-user . target , wants/目录下面的httpd , service软连接文件就会被删除。
[root@blab ~]# systemctl enable httpd.service //apache服务设置为开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@blab ~]# systemctl is-enabled httpd.service
enabled
[root@blab ~]# systemctl disable httpd.service //apache服务设置为开机关闭
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
[root@blab ~]#
[root@blab ~]# systemctl is-enabled httpd.service
disabled
[root@blab ~]#
在当前系统下执行"systemctl list-units --type=service"命令可以查看当前系统中所有已激活的系统服务,命令如下
[root@blab ~]# systemctl list-units --type=service //查看所有以及激活的系统服务
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
atd.service loaded active running Job spooling tools
例如,执行如下的""操作可以启动尚未运行的postfix服务
[root@blab ~]# systemctl start postfix.service
若要查看指定postfix服务的运行状态,只需将上述命令中的"start"改为"status"即可,若要停止 postfix服务,只需将"start"改为"stop"即可,具体命令如下:
[root@blab ~]# systemctl status postfix.service
[root@blab ~]# systemctl stop postfix.service //停止postfix服务
[root@blab ~]# systemctl status postfix.service
控制类型^restart"用在需要释放旧的资源全部从头开始的情况,它会先关闭相应的服务程序,然后重新运行.例如.当在网卡的配置文件中设置了新的IP地址以后,为了激活新的P地址,可以重新启动名称为network的系统服务,命令如下:
[root@blab ~]# systemctl restart network.service
对于在实际生产环境中运行的服务器,不要轻易执行stop或restart操作.以免造成客户端访问中断,带来不必要的损失。若只是要为系统服务启用新的配置,可以采用相对温和一些的reload参数重新加载配置,而不是生硬地执行"restart"。例如,对正在为用户提供Web访问的htpd 服务当需要应用新的配置时,建议执行"systemctl reload httpd.service"命令来重新载入配置,而不是执行"systemctl restart httpd.service
[root@blab ~]# systemctl reload httpd.service
4.5、查看当前系统中内存占用情况,重启并登录到字符模式,再次查看内存占用情况。
[root@blab ~]# cat /proc/meminfo | grep Mem
MemTotal: 2028112 kB
MemFree: 455940 kB
MemAvailable: 1593444 kB
通过切换target的操作,还可以实现两个特殊的功能,那就是关机和重启。运行级别0.6分别对应关机、重启这两个特殊模式,因此只要执行"init0"与"init 6"命令就可以实现相应的关机.重启操作了,命令如下:
[root@blab ~]# init 0 //关闭当前系统
[root@blab ~]# init 6 //重启当前系统
4.6、使用init命令切换到图形模式,再次确认运行目标并查看内存占用情况,比较优化服务前后及在不同运行级别中的差异。
[root@blab ~]# init 3
查看内存状态
[root@blab ~]# cat /proc/meminfo | grep Mem
MemTotal: 2028112 kB
MemFree: 1036824 kB
MemAvailable: 1599044 kB
内存使用量相对图形化界面少了