0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何列出systemd服务并解释它的输出呢

冬至子 来源:TIAP 作者:刘光录 2022-11-15 18:02 次阅读

systemd 负责解决系统管理中的很多问题。对于很多新手来说,对它可能不够熟悉。比如,怎样列出 systemd 的服务,可能就会让你想半天。

本文将介绍如何列出 systemd 服务,并解释它的输出,以便大家能更容易理解服务的不同状态。

在写这篇文章的时候,我假设你对 systemd 有所了解。但是如果不了解,应该也没什么问题...

如何列出 systemd 中活动的服务

systemd 服务由 systemctl 命令管理。如果我们不带任何参数运行 systemctl,它会默认调用 list-units 子命令,列出各种类型的 systemd 单元,比如服务(services)、套接字(sockets)、目标(targets)等。

但是我们的目的是要列出服务,所以可以使用 --type选项指定单元类型(unit type),如下所示:

systemctl --type=service

是否注意到我没有指定 list-units 子命令?因为它是默认的。如果想要按照约定使用,也可以指定。本文后面的部分会遵循这种约定。

systemctl list-units --type=service

上述两个命令输出是一样的。默认情况下,该命令会按照字母顺序列出已经加载且活动的服务:

UNIT                     LOAD   ACTIVE SUB     DESCRIPTION
  accounts-daemon.service  loaded active running Accounts Service
  acpid.service            loaded active running ACPI event daemon
  alsa-restore.service     loaded active exited  Save/Restore Sound Card State
  apparmor.service         loaded active exited  Load AppArmor profiles
  apport.service           loaded active exited  LSB: automatic crash report generation

我们来解释一下上述输出中的内容:

  • UNIT :systemd 单元名称;
  • LOAD :单元配置文件是否已由 systemd 解析;
  • ACTIVE :单元的高级别状态(high level state);
  • SUB :单元的低级别状态。活动单元(active unit)可以处于运行状态(running state)或退出状态(exited state),此值取决于服务类型。

上面的例子,我们可以列出 Linux 系统上加载的服务。但活动的 systemd 服务可能正在运行,也可能已经退出(在成功运行后)。

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

活动状态(active state)也有一个子状态(sub-status),比如正在运行(running)、已退出(exited)等。所以,可以在子状态中使用 --state 选项。

要列出正在运行的 systemd 服务,可以指明 --state=running,如下:

systemctl list-units --type=service --state=running

以下是一个输出的例子,列出了正在运行的 systemd 服务:

UNIT                        LOAD   ACTIVE SUB     DESCRIPTION
  accounts-daemon.service     loaded active running Accounts Service
  acpid.service               loaded active running ACPI event daemon
  avahi-daemon.service        loaded active running Avahi mDNS/DNS-SD Stack
  bluetooth.service           loaded active running Bluetooth service
  bolt.service                loaded active running Thunderbolt system service

列出所有已加载的systemd服务,包括非活动服务

默认情况下,systemctl 命令只列出已加载且活动的服务。如果要包含非活动的 服务,可以使用 --all 选项:

systemctl list-units --all --type=service

如下输出示例:

UNIT                                                  LOAD      ACTIVE   SUB     DESCRIPTION
  accounts-daemon.service                               loaded    active   running Accounts Service
  acpid.service                                         loaded    active   running ACPI event daemon
  alsa-restore.service                                  loaded    active   exited  Save/Restore Sound Card State
  alsa-state.service                                    loaded    inactive dead    Manage Sound Card State (restore and store)
  anacron.service                                       loaded    inactive dead    Run anacron jobs
  apparmor.service                                      loaded    active   exited  Load AppArmor profiles

列出所有非活动的systemd服务

如果要列出所有非活动的 systemd 服务,可以使用 --all 组合 --state 选项,如下:

systemctl list-units --all --type=service --state=inactive

如下为结果的输出,只列出了非活动的 systemd 服务:

UNIT                                   LOAD      ACTIVE   SUB  DESCRIPTION
  alsa-state.service                     loaded    inactive dead Manage Sound Card State (restore and store)
  anacron.service                        loaded    inactive dead Run anacron jobs
  apport-autoreport.service              loaded    inactive dead Process error reports when automatic reporting is enabled
  apt-daily-upgrade.service              loaded    inactive dead Daily apt upgrade and clean activities
  apt-daily.service                      loaded    inactive dead Daily apt download activities
● auditd.service                         not-found inactive dead auditd.service

列出所有已安装的systemd服务(即使未加载)

每一个 systemd 单元,包括服务(service),套接字(socket)或者其他的,都会有一个单元文件(unit file),所以我们可以利用其单元文件,列出所有已安装的 systemd 服务:

systemctl list-unit-files --type=service

以下是输出:

UNIT FILE                                  STATE           VENDOR PRESET
accounts-daemon.service                    enabled         enabled      
acpid.service                              disabled        enabled
alsa-restore.service                       static          enabled      
alsa-state.service                         static          enabled
alsa-utils.service                         masked          enabled      
anacron.service                            enabled         enabled      
apparmor.service                           enabled         enabled      
apport-autoreport.service                  static          enabled      
apport-forward@.service                    static          enabled

列出系统启动时会自动运行的 systemd 服务

要查看系统启动时,会自动运行的 systemd 服务,可以使用如下命令:

systemctl list-unit-files --type=service --state=enabled

你可能会对上述命令中,指定的状态为 enabled 有疑问,这很正常,很多新用户经常会将服务的“启用(enabled)”和“正在运行(running)”混淆。

这里,enabled systemd 服务表示系统启动时会自动激活该服务。

以下为输出:

UNIT FILE                                  STATE   VENDOR PRESET
accounts-daemon.service                    enabled enabled      
anacron.service                            enabled enabled      
apparmor.service                           enabled enabled      
autovt@.service                            enabled enabled      
avahi-daemon.service                       enabled enabled      
binfmt-support.service                     enabled enabled      
bluetooth.service                          enabled enabled      
console-setup.service                      enabled enabled      
containerd.service                         enabled enabled      
cron.service                               enabled enabled      
cups-browsed.service                       enabled enabled      
cups.service                               enabled enabled      
dbus-fi.w1.wpa_supplicant1.service         enabled enabled

注意到结果中的 Vendor Preset 一列了吗?它在前一个例子中也出现了。

Vendor preset 定义了安装程序时 systemd 单元的自动行为。

假设我们安装了一个新程序 XYZ,它有一个名为 xyz.service的服务,且 vendor preset状态为启用(enabled),这表示当启动系统时,xyz.service将会被自动激活。

如果 vendor preset 设置为 disabled,则必须手动设置为启用。一旦启用,他就会跟随系统自动启动。

sudo systemd enable xyz.service

显示某个特定 systemd 服务的状态

上文我们介绍了几种列出服务的方法。那么,怎样查看某一个服务的状态呢?

可以使用 systemctl 命令的子命令 status 来查看 systemd 服务的详细信息。使用该命令时,tab 键会补全输入。

systemctl status

以下是网络管理器服务(network manager service)的例子:

$ systemctl status NetworkManager.service 
● NetworkManager.service - Network Manager
     Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-07-23 08:12:44 IST; 3h 8min ago
       Docs: man:NetworkManager(8)
   Main PID: 711 (NetworkManager)
      Tasks: 3 (limit: 9157)
     Memory: 13.6M
     CGroup: /system.slice/NetworkManager.service
             └─711 /usr/sbin/NetworkManager --no-daemon


Jul 23 08:12:50 itsfoss NetworkManager[711]: <info>  [1595472170.7159] device (wlp58s0): Activation: successful, device activated.
Jul 23 08:12:50 itsfoss NetworkManager[711]: <info>  [1595472170.7179] manager: startup complete
Jul 23 08:12:51 itsfoss NetworkManager[711]: <info>  [1595472171.5592] manager: NetworkManager state is now CONNECTED_GLOBAL
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info>  [1595472172.7973] dhcp6 (wlp58s0): activation: beginning transaction (timeout in 45 seconds)
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info>  [1595472172.8017] policy: set 'JioFi3_215810' (wlp58s0) as default for IPv6 routing and DNS
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info>  [1595472172.8058] dhcp6 (wlp58s0): option dhcp6_name_servers   => 'fe80::a8dc:79ff:fe1b:57fe'
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info>  [1595472172.8059] dhcp6 (wlp58s0): state changed unknown -> bound
Jul 23 08:12:59 itsfoss NetworkManager[711]: <info>  [1595472179.9251] agent-manager: agent[bdd71d4a66098713,:1.84/org.gnome.Shell.NetworkAgent/1>
Jul 23 11:18:10 itsfoss NetworkManager[711]: <info>  [1595483290.7874] manager: NetworkManager state is now CONNECTED_SITE
Jul 23 11:18:11 itsfoss NetworkManager[711]: <info>  [1595483291.5893] manager: NetworkManager state is now CONNECTED_GLOBAL

上面例子中,我们可以看到它显示了很多信息,比如服务的状态、man 手册中的页码、内存使用情况、进程ID等,后面还显示了服务的最后的几个日志信息。

如果我们要在 shell 脚本中检查服务是否处于活动(active)状态,可以使用 is-active 子命令,0 表示已激活(active)。

systemctl is-active application.service

类似的,如果要检查服务是否已启用(设置为自启动),可以使用 is-enabled 子命令,0 表示已启用:

systemctl is-enabled application.service

以上就是本次分享全部内容,欢迎讨论。

审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    590

    浏览量

    27330
  • sub函数
    +关注

    关注

    0

    文章

    3

    浏览量

    1006
  • unit技术
    +关注

    关注

    0

    文章

    2

    浏览量

    1550
收藏 人收藏

    评论

    相关推荐

    Linux使用Systemd管理进程服务

    systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理
    发表于 11-28 09:07 539次阅读

    Linux使用Systemd管理进程服务

    今天浩道跟大家分享linux运维中大家很少用到的一个硬核干货,使用 Systemd 管理进程服务。让你体验一下该技巧带来的便捷性!
    发表于 12-12 09:02 456次阅读

    如何在 Linux 上从 NetworkManager 切换为 systemd

    、隧道和 VLAN。systemd-networkd 目前还不能直接支持无线网络,但你可以使用 wpa_supplicant 服务配置无线适配器,然后把systemd-netwo
    发表于 11-25 10:08

    【Intel Edison试用体验】严肃脸试用5——从SSH无法连接到systemd

    init占用,所以这里我们分析一下。注意:systemd入门教程推荐看阮一峰的博客,简洁明了:1、22.1 系统有没有安装SSH服务?【图3 - 系统情况】【图4 - JuiceSSH连接Edison
    发表于 08-10 23:04

    [转]CentOS7.5下开发systemctl管理的自定义Rsync启动服务程序

    sshd服务配置及解释说明。[code][root@oldboy ~]# cat /usr/lib/systemd/system/sshd.service[Unit] #
    发表于 08-27 16:36

    systemd定时器的基本操作方法

    定时器任务作为嵌入式系统中常见的应用,systemd 定时器为用户提供更多的可配置功能以及优化选项。本文列举了 systemd 定时器基本操作方法,以及和cron 对比,帮助用户更快得使用。更多的技术细节和功能请参考下面的链接内容。
    发表于 01-01 07:37

    i.M8XMQ开发板如何通过Systemd服务实现应用自启

    /helloworld.service此时即可将新添加的自启动服务生效,重启开发板后,此程序会自动运行,在默认端的音频即可听到音频输出。—— —— —— ——Systemd服务,可以实
    发表于 04-25 15:22

    如何将imx8mpevk板的默认Systemd - Init Manager更改为Sysvinit?

    = "sysvinit" 构建了图像。使用以下命令搜索确认变量值。$bitbake -e^INIT_MANAGER=但是为 Imx8mpevk“ps”命令从 SD 卡启动的图像仍然显示“PID 1 systemd”。
    发表于 03-15 06:42

    Systemd 又遭背锅:创建 Devuan 是为了保证 Linux 的稳定性

    Systemd 开发者将社区细化,大大降低了稳定性,增加了复杂性,但却没有多少实际价值。”
    的头像 发表于 12-14 16:55 5133次阅读

    Linux系统与服务管理工具Systemd被曝存在3大漏洞

    2013 年 4 月引入(systemd v203),并在 2016 年 2 月可利用(systemd v230),研究人员写了一个 PoC,可在 i386 上获得 eip 控制。
    的头像 发表于 01-25 16:51 3418次阅读
    Linux系统与<b class='flag-5'>服务</b>管理工具<b class='flag-5'>Systemd</b>被曝存在3大漏洞

    全加器真值表解释

    全加器能进行加数、被加数和低位来的进位信号相加,依据求和作用给出该位的进位信号。依据的功用,能够列出的真值表,如表1.2所示。
    发表于 02-18 14:33 5.9w次阅读
    全加器真值表<b class='flag-5'>解释</b>

    技术分享 | Linux系统下systemctl常用命令以及service文件配置

    linux服务管理的两种方式为service和systemctl。systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能并发启动更多
    的头像 发表于 09-22 09:37 2157次阅读
    技术分享 | Linux系统下systemctl常用命令以及service文件配置

    Linux项目开发,你必须了解Systemd服务!

    1.Systemd简介Systemd是什么,以前linux系统启动init机制,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务
    的头像 发表于 06-18 17:59 774次阅读
    Linux项目开发,你必须了解<b class='flag-5'>Systemd</b><b class='flag-5'>服务</b>!

    Systemd是什么?Systemd Service配置文件详解

    Systemd是什么,以前linux系统启动init机制,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理
    的头像 发表于 07-22 18:03 1393次阅读

    systemd journal收集日志的三种方式

    随着 systemd 成了主流的 init 系统,systemd 的功能也在不断的增加,比如对系统日志的管理。Systemd 设计的日志系统好处多多,这里笔者就不再赘述了,本文笔者主要介绍 s
    的头像 发表于 10-23 11:50 141次阅读
    <b class='flag-5'>systemd</b> journal收集日志的三种方式