这个问题其实是systemd219这个版本的问题(查看systemd版本,请使用systemctl --version)。
由于systemd进程的判断比之前更加严格,如果某些进程不响应SIGTERM信号,可能会导致重启是挂死,该问题和业务进程对SIGTERM信号的处理有关。
解决方法:
1、备份/etc/systemd/system.conf
cp -a /etc/systemd/system.conf /etc/systemd/system.conf_bak
当作为系统实现运行时,systemd将会按照system.conf配置文件以及system.conf.d配置目录中的指令工作,当作为用户实例运行时,systemd将会按照user.conf配置文件以及user.conf.d配置目录中的指令工作。这些配置文件包含了控制systemd行为的设置。
2、修改文件
# sed -i 's/#DefaultTimeoutStopSec=90s/DefaultTimeoutStopSec=30s/g' /etc/systemd/system.conf
用systemd管理进程时,系统复位默认等待时间为90s,如果一个进程不能正常结束,则需要倒计时90s,系统才能复位。修改为30s
3、重新加载
# systemctl daemon-reload
Linux操作系统的开机过程是这样的,即从bios开始,然后进入Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程。初始化进程作为Linux系统的第一个进程,它需要完成Linux系统中相关的化工作,为用户提供合适的工作环境。
RHEL、CentOS7等Linux发行系统已经替换了熟悉的初始化进程服务System V init,正式采用全新的systemd初始化进程服务。systemd初始化服务采用了并发启动机制,开机速度得到了不小的提升。
1、systemd概述
systemd即为system daemon,是Linux下的一种init软件,在LGPL 2.1及其后续版本许可下开源发布,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依次实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果。
systemd的优点是功能强大、使用方便,缺点是体系庞大、非常复杂。事实上,现在还有很多我反对使用systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反“keep simple, keep stupid”的Unix哲学。
2、系统管理相关命令
(1)systemctl是systemd是主命令,用于管理系统和服务
重启系统
systemctl reboot
关闭系统,切断电源
systemctl poweroff
CPU停止工作
systemctl halt
暂停系统
systemctl suspend
让系统进入冬眠状态
systemctl hibernate
让系统进入交互式休眠状态
systemctl hybrid-sleep
启动进入救援状态
systemctl rescue
立即启动一个服务
systemctl start httpd.service
立即停止一个服务
systemctl stop httpd.service
立即重启一个服务
systemctl restart httpd.service
杀死一个服务的所有子进程
systemctl kill httpd.service
重新加载一个服务的配置文件
systemctl reload httpd.service
重载所有修改过的配置文件
systemctl daemon-reload
显示某个unit的所有底层参数
systemctl show httpd.service
(2)systemd-analyze命令用于查看启动耗时
查看系统启动耗时
systemd-analyze
查看每个服务的启动耗时
systemd-analyze blame
显示瀑布状的系统启动过程流
systemd-analyze critical-chain
显示指定服务的启动流
systemd-analyze critical-chain atd.service
(3)hostnamectl命令用于查看当前主机的信息
显示当前主机的信息
hostnamectl
设置主机名
hostnamectl set-hostname xuad1
(4)localectl命令用于查看本地化设置
查看本地化设置
localectl
设置本地化参数
localectl set-locale LANG=zh_CN.UTF-8
(5)timedatectl命令用于查看当前系统时区设置
查看当前时区设置
timedatectl
显示所有可用的时区
timedatectl list-timezones
(6)loginctl命令用于查看当前登陆的用户
列出当前session
loginctl list-sessions
列出当前登录用户
loginctl list-users
列出显示指定用户的信息
loginctl show-user root
3、unit相关命令
systemd可以管理所有系统资源,不同的资源统称为Unit(单位),unit一共分成12种。
Service unit:系统服务
Target unit:多个Unit构成的一个组
Device Unit:硬件设备
Mount Unit:文件系统的挂载点
Automount Unit:自动挂载点
Path Unit:文件或路径
Scope Unit:不是由Systemd启动的外部进程
Slice Unit:进程组
Snapshot Unit:Systemd快照,可以切回某个快照
Socket Unit:进程间通信的socket
Swap Unit:swap文件
Timer Unit:定时器
(1)列出已启动的unit
systemctl list-units
列出所有unit,包括没有找到配置文件的或启动失败的
systemctl list-units --all
列出所有没有启动的unit
systemctl list-units --all --state=inactive
列出所有正在运行的、类型为service的unit
systemctl list-units --type=service
(2)systemctl status命令用于查看系统状态和单个unit的状态
显示单个unit的状态
systemctl status httpd.service