如何使用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

类似文章