Systemd 使用全解

本文翻译自 https://www.tecmint.com/list-all-running-services-under-systemd-in-linux/

Linux 系统提供了多种系统服务(如进程管理、登录、syslog、cron等)和网络服务(如远程登录、电子邮件、打印机、网站托管、数据存储、文件传输、域名解析(使用 DNS)、动态 IP 地址分配(使用 DHCP)等)。

从技术角度来看,服务是一个或一组守护进程(daemons),它们在后台持续运行,等待请求(尤其是来自客户端)的到来。

Linux 提供了多种方式来管理(启动、停止、重启、开机自启等)服务,通常是通过进程或服务管理器进行的。目前,大多数现代 Linux 发行版都使用相同的进程管理器:systemd

什么是 Systemd?

Systemd 是 Linux 的系统和服务管理器,它是 init 进程的替代品,并兼容 SysVLSB 的 init 脚本。管理 systemd 的主要工具是 systemctl 命令。

为什么要查看 Linux 中运行的服务?

了解 Linux 系统上运行的服务至关重要,原因包括:

  • 监控资源利用率
  • 排查性能问题
  • 确保关键服务正常运行
  • 优化系统性能和安全性

Systemd 提供了强大的 systemctl 命令,使得列出、监控和管理服务变得更加简单。

本指南将演示如何在 systemd 下列出所有运行中的服务,适用于不同经验水平的用户。

在 Linux 中列出 Systemd 运行的服务

当你不带参数运行 systemctl 命令时,它会显示所有已加载的 systemd 单元(Unit),包括服务,并展示它们的状态(是否处于活动状态)。

1
systemctl
List Systemctl Units in Linux

列出 Linux 中所有加载的服务

要列出系统上所有加载的服务(包括运行中、已退出或失败的服务),可以使用 list-units 子命令,并加上 --type=service 选项:

1
2
3
systemctl list-units --type=service
# OR
systemctl --type=service
List All Services Under Systemd

列出 Linux 中所有活动的服务

要列出所有加载但仍然处于活动状态的服务(包括正在运行和已退出的服务),可以添加 --state=active 选项:

1
2
3
systemctl list-units --type=service --state=active
# OR
systemctl --type=service --state=active
List All Active Running Services in Systemd

仅列出 Linux 中正在运行的服务

如果你只想快速查看所有正在运行的服务(即加载且处于活动运行状态的服务),可以使用以下命令:

1
2
3
systemctl list-units --type=service --state=running
# OR
systemctl --type=service --state=running
List Running Services in Systemd

Systemd 单元(Unit)及其状态解析

Systemd 单元的关键术语及其含义如下:

  • Unit(单元):可以是服务、套接字、设备等各种实体。
  • Load(加载状态):表示单元是否已加载。已加载的单元不一定是活动的。
  • Active(活动状态):显示单元是否正在运行,或是否因故障或其他原因处于非活动状态。
  • SUB(子状态):提供单元的具体状态。例如,服务可能是运行中(running)已停止(exited)*或*失败(failed)
  • Description(描述):用于帮助用户理解单元的功能,而无需深入查看配置文件。

创建 systemctl 命令的别名

如果你经常使用上面的命令,可以在 ~/.bashrc 文件中创建一个别名以便快速调用:

1
2
# 编辑 bashrc 文件
vim ~/.bashrc

添加以下行:

1
alias running_services='systemctl list-units --type=service --state=running'
Create an Alias for Long Command

保存并关闭文件后,你可以直接使用 running_services 命令来查看所有正在运行的服务:

1
2
# 使用别名查看运行中的服务
running_services
View All Running Services

查找服务监听的端口

要查看某个守护进程监听的端口,可以使用 netstat 或 ss 命令:

1
2
3
netstat -ltup | grep zabbix_agentd
# OR
ss -ltup | grep zabbix_agentd

其中:

  • -l:显示所有监听的套接字
  • -t:显示所有 TCP 连接
  • -u:显示所有 UDP 连接
  • -n:以数值显示端口号(而不是应用名称)
  • -p:显示应用程序名称

示例输出:

Determine Process Port

在 Linux 中自动监控服务状态

手动检查运行中的服务可能比较繁琐,尤其是在生产服务器上。你可以通过自动化的方式确保始终了解服务的状态变化。

使用 Cron 任务每 5 分钟检查运行的服务

你可以使用 cron 任务定期记录运行的服务,以便在发生故障时进行回溯。

1
crontab -e

添加以下行,每 5 分钟记录一次运行的服务:

1
*/5 * * * * systemctl list-units --type=service --state=running > /tmp/running_services.log

让 Systemd 自动重启失败的服务

如果某个服务崩溃或意外停止,你可以配置 systemd 让其自动重启。例如:

1
systemctl edit apache2

添加以下内容:

1
2
3
[Service]
Restart=always
RestartSec=5s

然后执行以下命令应用更改:

1
2
systemctl daemon-reload
systemctl restart apache2

结论

本指南介绍了如何在 Linux 下使用 systemd 查看运行中的服务,并探讨了端口监听、自动监控和服务故障自动重启的方法。希望对你有所帮助!

“觉得不错的话,给点打赏吧 (✿◕‿◕✿)”

微信二维码

微信支付

支付宝二维码

支付宝支付 (暂不支持)

Systemd 使用全解
https://lixuannan.github.io/posts/378.html
作者
CodingCow Lee
发布于
2025年3月17日
许可协议