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!

浙公网安备 33010602011771号