如何使用Systemctl管理Systemd服务?
目前大多数Linux发行版的默认系统和服务管理器是systemd
。
systemd
进程替代了SysV init
。它在内核引导后作为第一个进程运行,负责将Linux主机带到可使用的状态。它负责启动和管理服务、挂载文件系统、管理硬件、生成登录提示等等。
与SysV相比,systemd的一个关键好处是尽可能并行启动多个服务,从而加快了系统启动速度,使登录屏幕更快出现。
单元
由systemd管理的项目称为单元。单元文件位于/lib/systemd/
system目录中。
服务单元
对于服务管理,目标单元是服务单元,其单元文件的后缀是.service。
管理systemd服务
管理systemd单元的命令是systemctl
。
启动和停止服务
要启动一个systemd服务,使用systemctl start
命令:
$ sudo systemctl start name.service
您可以省略.service后缀。例如,在Ubuntu上启动apache服务器:
$ sudo systemctl start apache2
要停止正在运行的服务:
$ sudo systemctl stop name.service
因此,要停止Ubuntu上的apache服务器:
$ sudo systemctl stop apache2
重启和重新加载服务
要重启正在运行的服务,使用重启命令:
$ sudo systemctl restart name.service
只有在需要重新加载配置文件时才使用
$ sudo systemctl reload name.service
启用和禁用服务
如果您希望服务在系统启动时自动启动,请使用启用命令:
$ sudo systemctl enable name.service
要禁用服务在系统启动时启动:
$ sudo systemctl disable name.service
禁用不会停止正在运行的服务。
查看服务状态
要查看有关服务的信息:
$ sudo systemctl status name.service
这将显示服务的状态和日志文件的前几行。因此,在服务运行时,
sudo systemctl status apache2
的输出为:
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Tue 2020-05-19 22:11:36 UTC; 4 days ago
Process: 116002 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Main PID: 104165 (apache2)
Tasks: 55 (limit: 1024)
CGroup: /system.slice/apache2.service
├─104165 /usr/sbin/apache2 -k start
├─116006 /usr/sbin/apache2 -k start
└─116007 /usr/sbin/apache2 -k start
May 19 22:11:36 ubuntu18 systemd[1]: Starting The Apache HTTP Server...
May 19 22:11:36 ubuntu18 systemd[1]: Started The Apache HTTP Server.
May 21 06:25:01 ubuntu18 systemd[1]: Reloading The Apache HTTP Server.
May 21 06:25:01 ubuntu18 systemd[1]: Reloaded The Apache HTTP Server.
May 22 06:25:01 ubuntu18 systemd[1]: Reloading The Apache HTTP Server.
要检查服务是否活动:
$ sudo systemctl is-active name.service
所以,当apache2服务正在运行时,systemctl is-active命令的输出为:
$ sudo systemctl is-active apache2
active
要检查服务是否已启用:
$ sudo systemctl is-enabled name.service.
查看系统状态
到目前为止,您所看到的所有命令都用于管理单个服务。当您想要查看系统状态概览时,请使用以下命令集:
查看所有单元类型
$ sudo systemctl -t help
可用单元类型:
service
socket
target
device
mount
automount
swap
timer
path
slice
scope
要列出所有已安装的单元,请使用list-unit-files
$ sudo systemctl list-unit-files
单元文件 状态
proc-sys-fs-binfmt_misc.automount 静态
-.mount 生成
boot-efi.mount 生成
dev-hugepages.mount 静态
dev-mqueue.mount 静态
mnt.mount 生成
proc-sys-fs-binfmt_misc.mount 静态
sys-fs-fuse-connections.mount 静态
sys-kernel-config.mount 静态
sys-kernel-debug.mount 静态
acpid.path 启用
apport-autoreport.path 启用
systemd-ask-password-console.path 静态
systemd-ask-password-plymouth.path 静态
systemd-ask-password-wall.path 静态
session-161.scope 瞬态
accounts-daemon.service 启用
输出只有两列:Unit File和State。状态通常为enabled、disabled、static或masked。
- 静态:这意味着该单元无法启用,执行一次性操作,或者是另一个单元的依赖项,无法单独运行。
- 被遮蔽:被列为遮蔽的单元意味着它完全无法启动,因为它与/dev/null链接在一起。这称为遮蔽该单元。这会阻止服务被手动或自动启动。
列出所有已安装的服务
使用systemctl list-unit-files命令和-t或–type service过滤器,只显示已安装服务的状态。
$ sudo systemctl list-unit-files -t service
单元文件 状态
accounts-daemon.service 启用
acpid.service 禁用
apache-htcacheclean.service 禁用
[email protected] 禁用
apache2.service 启用
[email protected] 禁用
apparmor.service 启用
apport-autoreport.service 静态
[email protected] 静态
apport.service 生成
apt-daily-upgrade.service 静态
apt-daily.service 静态
atd.service 启用
[email protected] 启用
blk-availability.service 启用
bootlogd.service 遮蔽
bootlogs.service 遮蔽
要查看所有活动服务单元,请使用list-units与-t service过滤器
$ sudo systemctl list-units -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service 已加载 活跃 运行中 账户服务
apache2.service 已加载 活跃 运行中 Apache HTTP服务器
apparmor.service 已加载 活跃 退出 AppArmor初始化
apport.service 已加载 活跃 退出 LSB:自动生成崩溃报告
atd.service 已加载 活跃 运行中 延迟执行调度器
blk-availability.service 已加载 活跃 退出 块设备可用性
cloud-config.service 已加载 活跃 退出 应用云配置中指定的设置
cloud-final.service 已加载 活跃 退出 执行云用户/最终脚本
cloud-init-local.service 已加载 活跃 退出 初始云初始化作业(预网络)
cloud-init.service 已加载 活跃 退出 初始云初始化作业(元数据服务)
console-setup.service 已加载 活跃 退出 设置控制台字体和键盘映射
cron.service 已加载 活跃 运行中 定期后台程序处理守护进程
输出具有以下列:
– UNIT:systemd服务单元名称
– LOAD:显示单元定义是否已正确读取和加载
– ACTIVE:描述单元是否处于活动状态。
– SUB:单元的低级激活状态,提供有关单元的更详细信息。这将根据单元类型而变化。
– DESCRIPTION:服务单元的描述。
结论
希望这给你一个关于在Linux上使用systemctl管理服务的想法。如果有兴趣了解更多信息,可以查看这个Linux Mastery course。