Linux下Systemd服务的核心功能及列出 Systemd 服务的方法!

1.什么是Linux中的systemd服务

在 Linux 系统中,systemd 是一种系统和服务管理器(System and Service Manager),它是现代大多数 Linux 发行版(如 Fedora、Ubuntu、CentOS 等)默认使用的初始化系统(init system)。它取代了传统的 SysV init 和 Upstart,旨在提高系统启动速度、管理服务的依赖关系,并提供更强大的功能。

1.1 systemd 的核心功能

1)初始化系统

  • 负责系统启动流程,并行启动服务以加快开机速度。

  • 通过 单元文件(Unit Files) 定义服务、挂载点、定时任务等。

2)服务管理

  • 控制服务的启动、停止、重启、状态查看等(通过 systemctl 命令)。

  • 支持服务依赖管理(例如:数据库服务需在 Web 服务前启动)。

3)进程监控

  • 自动重启崩溃的服务,确保系统稳定性。

4)日志管理

  • 集成 journalctl 工具,统一收集系统和服务日志。

5)资源控制

  • 限制服务的 CPU、内存等资源使用(通过 cgroups)。

6)定时任务

  • 替代传统的 cron,通过 .timer 单元文件管理定时任务。
1.2单元文件(Unit Files)

每个 systemd 服务对应一个 .unit 配置文件,通常位于以下目录:

  • /etc/systemd/system/(用户自定义或覆盖配置)

  • /lib/systemd/system/(系统默认配置)

1.3典型单元文件示例(nginx.service)

下面是一个典型的 Nginx 的 systemd 单元配置文件,用于管理 Nginx 服务的启动、停止和重启等行为。

复制代码
[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/bin/kill -s HUP $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

关于这个文件的写法,下一篇公众号专门来说明,下面先解释这个服务单元文件的每一行的含义:

它分三个部分:


[Unit] 部分

定义服务的基本信息和依赖关系。

  • Description=A high performance web server and a reverse proxy server

    • 描述该服务的作用,这里说明 Nginx 是一个高性能 Web 服务器和反向代理服务器。
  • After=network.target

    • 表示 Nginx 应该在 network.target(网络服务)启动 之后 再启动,确保网络可用后再运行 Web 服务。

[Service] 部分

定义服务的运行行为,包括启动、停止、重启等命令。

  • Type=forking

    • 表示 Nginx 以 守护进程(daemon) 方式运行(即主进程会 fork 子进程),systemd 需要跟踪主进程。
  • PIDFile=/run/nginx.pid

    • 指定 Nginx 主进程的 PID 文件路径,systemd 通过该文件获取进程 ID 以管理服务。
  • ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'

    • 启动前检查 :在正式启动前,先运行 nginx -t -q 测试配置文件语法是否正确(-q 表示静默模式)。
  • ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'

    • 启动命令 :运行 Nginx,并通过 -g 传递全局配置参数(daemon on 表示以守护进程运行,master_process on 启用主进程模式)。
  • ExecReload=/bin/kill -s HUP $MAINPID

    • 重载命令 :发送 HUP 信号(平滑重启)给 Nginx 主进程($MAINPID 是 systemd 自动替换的变量,表示主进程 PID)。
  • PrivateTmp=true

    • 启用私有临时目录(/tmp),增强安全性,防止服务间临时文件冲突。

[Install] 部分

定义服务的安装目标(何时/如何被启用)。

  • WantedBy=multi-user.target

    • 表示当系统进入 多用户模式(命令行模式) 时,自动启动 Nginx 服务。

    • 该配置会在执行 systemctl enable nginx 时创建一个符号链接到 multi-user.target.wants/ 目录。

2.如何在 systemd 中列出活动服务

systemd 服务通过 systemctl 命令进行管理,如果直接运行不带参数的 systemctl 命令,它会默认执行 list-units 子命令,列出所有类型的 systemd 单元(如服务、套接字、目标等)。

想要列出服务,需要配合 --type 参数指定单元类型,具体操作如下:

复制代码
systemctl --type=service

或者

复制代码
systemctl list-units --type=service

这两条命令的输出结果是一样的:

复制代码
[root@backup ~]# systemctl list-units --type=service
UNIT                                                                                      LOAD   ACTIVE SUB     DESCRIPTION
abrt-ccpp.service                                                                         loaded active exited  Install ABRT coredump hook
abrt-oops.service                                                                         loaded active running ABRT kernel log watcher
abrt-xorg.service                                                                         loaded active running ABRT Xorg log watcher
abrtd.service                                                                             loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service                                                                   loaded active running Accounts Service
alsa-state.service                                                                        loaded active running Manage Sound Card State (restore and store)
atd.service                                                                               loaded active running Job spooling tools
auditd.service                                                                            loaded active running Security Auditing Service
avahi-daemon.service                                                                      loaded active running Avahi mDNS/DNS-SD Stack
blk-availability.service                                                                  loaded active exited  Availability of block devices
bolt.service                                                                              loaded active running Thunderbolt system service
chronyd.service                                                                           loaded active running NTP client/server
colord.service                                                                            loaded active running Manage, Install and Generate Color Profiles
containerd.service                                                                        loaded active running containerd container runtime
crond.service                                                                             loaded active running Command Scheduler
cups.service                                                                              loaded active running CUPS Printing Service
dbus.service                                                                              loaded active running D-Bus System Message Bus
gdm.service                                                                               loaded active running GNOME Display Manager
gssproxy.service                                                                          loaded active running GSSAPI Proxy Daemon
irqbalance.service                                                                        loaded active running irqbalance daemon
iscsi-shutdown.service                                                                    loaded active exited  Logout off all iSCSI sessions on shutdown
kdump.service                                                                             loaded active exited  Crash recovery kernel arming
kmod-static-nodes.service                                                                 loaded active exited  Create list of required static device nodes for the current kernel
ksm.service                                                                               loaded active exited  Kernel Samepage Merging
......

关于上面输出结果解释如下:

  • UNIT:表示 systemd 单元的名称。

  • LOAD:显示该单元的配置文件是否已被 systemd 加载解析。

  • ACTIVE:单元当前的高层级状态(如运行中、已停止等)。

  • SUB:单元的低层级状态。活跃状态(ACTIVE)的单元可能处于"运行中"(running)或"已退出"(exited)等子状态,具体取决于服务类型。

可以看到,这个列表展示了系统中所有已加载的服务。不过需要注意的是,处于 ACTIVE 状态的 systemd 服务既可能是正在运行的,也可能是已成功执行后处于退出状态(exited)。

3.列出所有正在运行的 systemd 服务

活跃(ACTIVE)状态还能进一步细分为子状态,比如"运行中"(running)、"已退出"(exited)等。我们可以在使用 --state 参数时,直接指定这些子状态进行过滤。

如果要列出所有正在运行的 systemd 服务,可以加上 --state=running 参数:

复制代码
systemctl list-units --type=service --state=running

这样,显示结果如下(这里列出部分):

复制代码
[root@backup ~]# systemctl list-units --type=service --state=running
UNIT                     LOAD   ACTIVE SUB     DESCRIPTION
abrt-oops.service        loaded active running ABRT kernel log watcher
abrt-xorg.service        loaded active running ABRT Xorg log watcher
abrtd.service            loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service  loaded active running Accounts Service
alsa-state.service       loaded active running Manage Sound Card State (restore and store)
atd.service              loaded active running Job spooling tools
auditd.service           loaded active running Security Auditing Service
avahi-daemon.service     loaded active running Avahi mDNS/DNS-SD Stack
bolt.service             loaded active running Thunderbolt system service
chronyd.service          loaded active running NTP client/server
colord.service           loaded active running Manage, Install and Generate Color Profiles
......
4.列出所有已加载的 systemd 服务(包括未活动的服务)

默认情况下,systemctl 命令仅显示已加载的单元和活动单元。

如果要列出所有已加载的服务,包括非活动服务,在命令中加上--all参数:

复制代码
systemctl list-units --all --type=service

这样就可以看到非活动的服务:

复制代码
[root@backup ~]# systemctl list-units --all --type=service
  UNIT                                                                                      LOAD      ACTIVE   SUB     DESCRIPTION
  abrt-ccpp.service                                                                         loaded    active   exited  Install ABRT coredump hook
  abrt-oops.service                                                                         loaded    active   running ABRT kernel log watcher
  abrt-vmcore.service                                                                       loaded    inactive dead    Harvest vmcores for ABRT
  abrt-xorg.service                                                                         loaded    active   running ABRT Xorg log watcher
  abrtd.service                                                                             loaded    active   running ABRT Automated Bug Reporting Tool
  accounts-daemon.service                                                                   loaded    active   running Accounts Service
  alsa-restore.service                                                                      loaded    inactive dead    Save/Restore Sound Card State
  alsa-state.service                                                                        loaded    active   running Manage Sound Card State (restore and store)
● apparmor.service                                                                          not-found inactive dead    apparmor.service
  atd.service                                                                               loaded    active   running Job spooling tools
  auditd.service                                                                            loaded    active   running Security Auditing Service
  auth-rpcgss-module.service                                                                loaded    inactive dead    Kernel Module supporting RPCSEC_GSS
  avahi-daemon.service                                                                      loaded    active   running Avahi mDNS/DNS-SD Stack
  blk-availability.service                                                                  loaded    active   exited  Availability of block devices
  bolt.service                                                                              loaded    active   running Thunderbolt system service
  chronyd.service                                                                           loaded    active   running NTP client/server
● cloud-init-local.service                                                                  not-found inactive dead    cloud-init-local.service
  colord.service                                                                            loaded    active   running Manage, Install and Generate Color Profiles
......
5.列出所有非活动 systemd 服务

如果只想查看所有非活动服务,可以在--state=inactive参数:

复制代码
systemctl list-units --all --type=service --state=inactive

[root@backup ~]# systemctl list-units --all --type=service --state=inactive
  UNIT                                                  LOAD      ACTIVE   SUB  DESCRIPTION
  abrt-vmcore.service                                   loaded    inactive dead Harvest vmcores for ABRT
  alsa-restore.service                                  loaded    inactive dead Save/Restore Sound Card State
● apparmor.service                                      not-found inactive dead apparmor.service
  auth-rpcgss-module.service                            loaded    inactive dead Kernel Module supporting RPCSEC_GSS
● cloud-init-local.service                              not-found inactive dead cloud-init-local.service
  cpupower.service                                      loaded    inactive dead Configure CPU power related settings
  dm-event.service                                      loaded    inactive dead Device-mapper event daemon
  dmraid-activation.service                             loaded    inactive dead Activation of DM RAID sets
  dracut-cmdline.service                                loaded    inactive dead dracut cmdline hook
  dracut-initqueue.service                              loaded    inactive dead dracut initqueue hook
  dracut-mount.service                                  loaded    inactive dead dracut mount hook
......
6.列出所有已安装的 systemd 服务(即使它们未加载)

每个 systemd 单元,无论是服务单元、套接字还是任何其他单元,都有一个单元文件:

复制代码
systemctl list-unit-files --type=service

下面列出了每个服务单元对应的文件:

复制代码
[root@backup ~]# systemctl list-unit-files --type=service
UNIT FILE                                     STATE   
abrt-ccpp.service                             enabled 
abrt-oops.service                             enabled 
abrt-pstoreoops.service                       disabled
abrt-vmcore.service                           enabled 
abrt-xorg.service                             enabled 
abrtd.service                                 enabled 
accounts-daemon.service                       enabled 
alsa-restore.service                          static  
alsa-state.service                            static  
anaconda-direct.service                       static  
anaconda-nm-config.service                    static  
anaconda-noshell.service                      static  
anaconda-pre.service                          static  
[email protected]                       static  
anaconda-sshd.service                         static  
[email protected]                        static  
......
7.列出将在每次启动时自动运行的所有 systemd 服务

要查看每次系统引导时将自动运行的所有 systemd 服务,请使用以下命令:

复制代码
systemctl list-unit-files --type=service --state=enabled

如下,这些服务将在系统启动时自动激活:

复制代码
[root@backup ~]# systemctl list-unit-files --type=service --state=enabled
UNIT FILE                                  STATE  
abrt-ccpp.service                          enabled
abrt-oops.service                          enabled
abrt-vmcore.service                        enabled
abrt-xorg.service                          enabled
abrtd.service                              enabled
accounts-daemon.service                    enabled
atd.service                                enabled
auditd.service                             enabled
[email protected]                            enabled
avahi-daemon.service                       enabled
bluetooth.service                          enabled
chronyd.service                            enabled
crond.service                              enabled
cups.service                               enabled
......
8.显示特定 systemd 服务的状态

可以通过下面命令,查看单一服务的状态:

复制代码
systemctl status <service_name>

比如,要查看网络管理器服务:

复制代码
[root@backup ~]# systemctl status NetworkManager.service
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: active (running) since 二 2025-03-18 14:43:25 CST; 2 weeks 0 days ago
     Docs: man:NetworkManager(8)
 Main PID: 910 (NetworkManager)
    Tasks: 3
   Memory: 1.7M
   CGroup: /system.slice/NetworkManager.service
           └─910 /usr/sbin/NetworkManager --no-daemon

Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
[root@backup ~]# 

可以看到它提供了很多有用的信息,比如服务的状态、服务的手册页、它消耗的内存、进程 ID 等。

相关推荐
天夏已微凉40 分钟前
1.3.2 linux音频PulseAudio详细介绍
linux·音视频
李二。1 小时前
wordpress自学笔记 第二节: 3种独立站商城横幅的制作
服务器·笔记·wordpress
烦躁的大鼻嘎1 小时前
【Linux】深入拆解Ext文件系统:从磁盘物理结构到Linux文件管理
linux·运维·服务器·ubuntu·centos
chenzhuyu2 小时前
海康摄像机在Edge浏览器的网页无法直接预览,按照要求安装WebComponents后仍然提示请安装插件或预览失败的解决办法
运维
极小狐2 小时前
如何减少极狐GitLab 容器镜像库存储?
运维·git·rpc·kubernetes·ssh·gitlab·terraform
成工小白2 小时前
【Linux】环境变量(图文)
linux·环境变量
cooldream20092 小时前
深入理解负载均衡:传输层与应用层的原理与实战
运维·负载均衡·系统架构师
YoungHong19922 小时前
Ubuntu通过源码编译方式单独安装python3.12
linux·运维·python·ubuntu
IT小饕餮2 小时前
华为设备MSTP
运维·华为
传知摩尔狮3 小时前
深入理解 Linux 虚拟文件系统(VFS)
linux·运维·服务器·性能优化