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 进程的替代品,并兼容 SysV 和 LSB 的 init 脚本。管理 systemd 的主要工具是 systemctl 命令。
为什么要查看 Linux 中运行的服务?
了解 Linux 系统上运行的服务至关重要,原因包括:
- 监控资源利用率
- 排查性能问题
- 确保关键服务正常运行
- 优化系统性能和安全性
Systemd 提供了强大的 systemctl 命令,使得列出、监控和管理服务变得更加简单。
本指南将演示如何在 systemd 下列出所有运行中的服务,适用于不同经验水平的用户。
在 Linux 中列出 Systemd 运行的服务
当你不带参数运行 systemctl 命令时,它会显示所有已加载的 systemd 单元(Unit),包括服务,并展示它们的状态(是否处于活动状态)。
1 |
|

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

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

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

Systemd 单元(Unit)及其状态解析
Systemd 单元的关键术语及其含义如下:
- Unit(单元):可以是服务、套接字、设备等各种实体。
- Load(加载状态):表示单元是否已加载。已加载的单元不一定是活动的。
- Active(活动状态):显示单元是否正在运行,或是否因故障或其他原因处于非活动状态。
- SUB(子状态):提供单元的具体状态。例如,服务可能是运行中(running)、已停止(exited)*或*失败(failed)。
- Description(描述):用于帮助用户理解单元的功能,而无需深入查看配置文件。
创建 systemctl
命令的别名
如果你经常使用上面的命令,可以在 ~/.bashrc
文件中创建一个别名以便快速调用:
1 |
|
添加以下行:
1 |
|

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

查找服务监听的端口
要查看某个守护进程监听的端口,可以使用 netstat 或 ss 命令:
1 |
|
其中:
-l
:显示所有监听的套接字-t
:显示所有 TCP 连接-u
:显示所有 UDP 连接-n
:以数值显示端口号(而不是应用名称)-p
:显示应用程序名称
示例输出:

在 Linux 中自动监控服务状态
手动检查运行中的服务可能比较繁琐,尤其是在生产服务器上。你可以通过自动化的方式确保始终了解服务的状态变化。
使用 Cron 任务每 5 分钟检查运行的服务
你可以使用 cron 任务定期记录运行的服务,以便在发生故障时进行回溯。
1 |
|
添加以下行,每 5 分钟记录一次运行的服务:
1 |
|
让 Systemd 自动重启失败的服务
如果某个服务崩溃或意外停止,你可以配置 systemd 让其自动重启。例如:
1 |
|
添加以下内容:
1 |
|
然后执行以下命令应用更改:
1 |
|
结论
本指南介绍了如何在 Linux 下使用 systemd 查看运行中的服务,并探讨了端口监听、自动监控和服务故障自动重启的方法。希望对你有所帮助!
“觉得不错的话,给点打赏吧 (✿◕‿◕✿)”

微信支付

支付宝支付 (暂不支持)