systemctl

systemd是一个服务管理器,目前已经成为Linux发行版的新标准。它使管理服务器变得更加容易。

1. systemctl 的由来

在 centos7 以前使用 service 来管理服务的,虽然它使用起来比较简单,但是对于每一个服务,都需要我们人为的编写脚本来控制服务的启动、停止、重启等,服务控制得好坏,完全依赖于编写脚本的人,而且有些脚本会很长,需要自己处理的情况比较多

比如 /etc/init.d/network 是管理网络服务的脚本,它有250行,而且脚本中逻辑处理还是挺复杂的

为了解决上述的问题,在 centos7 中引入了systemctl服务管理的工具,它使用固定格式的脚本来控制服务的启停。

2. 服务启停

对于支持 systemd 的软件,安装的时候,它会自动的在 /usr/lib/systemd/system 目录添加一个配置文件

下面以mysql为例来说明如何设置开机启动

systemctl enable mysqld
执行上面的命令之后,在 /etc/systemd/system/multi-user.target.wants 目录下添加一个符号链接,这个链接指向 /usr/lib/systemd/system/ 里面的 mysqld.service 文件

设置开机启动后,需要等下一次开机的时候,才会自动执行 /etc/systemd/system/ 目录中的文件

systemctl start mysqld // 启动服务;

systemctl is-enabled mysqld // 查询服务开机启动状态;

systemctl status mysqld // 检查服务是否启动成功;

systemctl is-active mysqld // 查看服务的状态;

systemctl stop mysqld // 停止服务;

systemctl restart mysqld // 重启服务;

Loaded: 配置文件的位置 /usr/lib/systemd/system/mysqld.service

Active:状态,active (running) 表示启动,如果是 inactive (dead) 表示已关闭

Docs: 服务器文档

Main PID:主进程ID

CGroup:进程组中所有子进程

服务的配置文件:/usr/lib/systemd/system/mysqld.service,服务是根据它的配置来启动和停止的;

systemctl cat sshd:查看服务的配置文件;

# /usr/lib/systemd/system/sshd.service
[Unit]	# 启动顺序单元的依赖关系
Description=OpenSSH server daemon	# 服务描述
Documentation=man:sshd(8) man:sshd_config(5)	#服务的文档位置
After=network.target sshd-keygen.service	#当前服务在指定的服务之后启动
# Before=network.target sshd-keygen.service		# 当前服务在指定的服务之前启动
Wants=sshd-keygen.service	# 弱依赖,弱依赖服务启动失败不影响主服务的启动
# Requires=sshd-keygen.service	# 强依赖,强依赖服务启动失败,主服务无法启动

[Service]	# 服务的启动命令以及启动参数
Type=notify	# 启动类型(simple/forking/notify)
	# - simple     默认值,ExecStart字段启动的进程为主进程
	# - forking    ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
	# - notify     类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
EnvironmentFile=/etc/sysconfig/sshd	# 环境变量文件;当前配置文件可用$KEY方式引用环境变量文件中的参数
ExecStart=/usr/sbin/sshd -D $OPTIONS	# 启动服务执行的命令
ExecReload=/bin/kill -HUP $MAINPID		# 重启服务执行的命令
KillMode=process		# 停止服务的模式(control-group/process/mixed)
	# - control-group     默认值,当前的控制组里面的所有进程都会被杀掉
	# - process           只杀主进程
	# - mixed             主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
	# - 				没有进程会被杀掉,只是执行服务的 stop 命令
Restart=on-failure		# 服务因为何种原因退出才会重启服务
	# - always       不论服务因为何种情况退出,总是重启
	# - on-success   正常退出时
	# - on-failure   非常正常退出时(大部分的情况下设置为on-failure)
	# - on-abnormal  被信号终止和超时时,才重启
	# - on-abort     只在收到了没有捕捉的信号时,才重启
	# - on-watchdog   超时退出,才重启
RestartSec=42s		# 服务重启前需等待时间

[Install]		# 安装配置文件,定义开机自启动
WantedBy=multi-user.target		# 服务所在的Target,Target可理解为一组服务

比如:

sshd 的 WantedBy 字段值是 multi-user.target,执行 systemctl enable sshd 之后相当于执行:

ln -s /usr/lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/sshd.service

ll /etc/systemd/system/multi-user.target.wants/

total 0
lrwxrwxrwx. 1 root root 38 Jul 20  2023 auditd.service -> /usr/lib/systemd/system/auditd.service
lrwxrwxrwx. 1 root root 37 Jul 20  2023 brandbot.path -> /usr/lib/systemd/system/brandbot.path
lrwxrwxrwx. 1 root root 37 Jul 20  2023 crond.service -> /usr/lib/systemd/system/crond.service
lrwxrwxrwx. 1 root root 41 Jul 20  2023 firewalld.service -> /usr/lib/systemd/system/firewalld.service
lrwxrwxrwx. 1 root root 42 Jul 20  2023 irqbalance.service -> /usr/lib/systemd/system/irqbalance.service
lrwxrwxrwx. 1 root root 46 Jul 20  2023 NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx. 1 root root 39 Jul 20  2023 postfix.service -> /usr/lib/systemd/system/postfix.service
lrwxrwxrwx. 1 root root 40 Jul 20  2023 remote-fs.target -> /usr/lib/systemd/system/remote-fs.target
lrwxrwxrwx. 1 root root 46 Jul 20  2023 rhel-configure.service -> /usr/lib/systemd/system/rhel-configure.service
lrwxrwxrwx. 1 root root 41 Jul 20  2023 rhsmcertd.service -> /usr/lib/systemd/system/rhsmcertd.service
lrwxrwxrwx. 1 root root 39 Jul 20  2023 rsyslog.service -> /usr/lib/systemd/system/rsyslog.service
lrwxrwxrwx. 1 root root 36 Jul 20  2023 sshd.service -> /usr/lib/systemd/system/sshd.service
lrwxrwxrwx. 1 root root 37 Jul 20  2023 tuned.service -> /usr/lib/systemd/system/tuned.service
lrwxrwxrwx. 1 root root 40 Jul 20  2023 vmtoolsd.service -> /usr/lib/systemd/system/vmtoolsd.service
lrwxrwxrwx. 1 root root 40 Jul 20  2023 yum-cron.service -> /usr/lib/systemd/system/yum-cron.service

ystemctl disable sshd 命令之后,去掉两个目录之间的符号链接,开机不会自启动 sshd 服务

sshd.service 的 .service 表示Unit(单元)的种类,如果省略,默认的后缀是 .service ,所以 sshd 会被当做 sshd.service

3. 重新加载配置

如果修改了服务的配置文件,需要重新加载配置文件,然后重启服务

systemctl daemon-reload
systemctl restart mysqld

4. 救援模式

systemctl rescue

当出现系统无法正常引导时,可以将系统置于救援模式。救援模式提供了用于修复系统问题的单用户界面。

进入救援模式之后,当前登陆的其他用户会收到一条通知:

The system is going down to rescue mode NOW!

posted @ 2024-01-30 18:29  LandonXing  阅读(54)  评论(0)    收藏  举报