Python:操控systemd一网打尽守护进程
·
简介:systemd(系统守护进程)是Linux操作系统中的init系统和服务管理器,由Lennart Poettering主导开发,在LGPL 2.1及其后续版本许可证下开源发布。作为Linux系统的基本构建基块套件,systemd以PID 1进程运行并负责启动系统其余组件,提供按需启动守护程序、自动挂载点维护、进程跟踪及服务依赖关系管理功能。其技术特征包括Socket激活式服务、Cgroups进程追踪机制,并通过WSL子系统实现跨平台服务管理支持。systemd-python是Python语言的库,用于与systemd系统服务进行交互,提供对systemd日志(journal)、守护进程(daemon)等功能的访问。
历史攻略:
Python:多进程,多线程,协程基础案例
Python:aiomultiprocess实现协程与多进程的强强联合
安装:
步骤1:安装系统开发库
systemd-python 是一个需要编译的 Python 包,它依赖于系统的开发库。
# 对于 Ubuntu/Debian 系统:
apt update
apt install -y pkg-config libsystemd-dev build-essential
# 对于 CentOS/RHEL/Alibaba Cloud Linux 系统:
yum install -y pkgconfig systemd-devel gcc python3-devel
dnf install -y pkgconfig systemd-devel gcc python3-devel
步骤2:pip安装 systemd-python
pip install systemd-python
案例:
1、创建简单的 Python 脚本:/root/simple-service.py
#!/usr/bin/env python3
import time
import systemd.daemon
def main():
print("简单服务启动中...")
# 告诉 systemd 服务已就绪
systemd.daemon.notify('READY=1')
# 简单的主循环
count = 0
while True:
print(f"服务运行中... 计数: {count}")
count += 1
time.sleep(2)
if __name__ == "__main__":
main()
2、创建 systemd 服务文件:/etc/systemd/system/simple-python.service
[Unit]
Description=Simple Python Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /root/simple-service.py
WorkingDirectory=/root/
Restart=always
[Install]
WantedBy=multi-user.target
3、启用和管理服务
# 重新加载 systemd
systemctl daemon-reload
# 启动服务
systemctl start simple-python
# 查看状态
systemctl status simple-python
# 查看日志
journalctl -u simple-python -f
# 停止服务
systemctl stop simple-python
4、运行结果:
(base) root@iZwz97aveou7xd62qsx1kfZ:~# systemctl stop simple-python
(base) root@iZwz97aveou7xd62qsx1kfZ:~# systemctl status simple-python
● simple-python.service - Simple Python Service
Loaded: loaded (/etc/systemd/system/simple-python.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Nov 26 01:31:11 iZwz97aveou7xd62qsx1kfZ systemd[1]: simple-python.service: Failed with result 'exit-code'.
Nov 26 01:31:11 iZwz97aveou7xd62qsx1kfZ systemd[1]: simple-python.service: Service hold-off time over, scheduling restart.
Nov 26 01:31:11 iZwz97aveou7xd62qsx1kfZ systemd[1]: simple-python.service: Scheduled restart job, restart counter is at 5.
Nov 26 01:31:11 iZwz97aveou7xd62qsx1kfZ systemd[1]: Stopped Simple Python Service.
Nov 26 01:31:11 iZwz97aveou7xd62qsx1kfZ systemd[1]: simple-python.service: Start request repeated too quickly.
Nov 26 01:31:11 iZwz97aveou7xd62qsx1kfZ systemd[1]: simple-python.service: Failed with result 'exit-code'.
Nov 26 01:31:11 iZwz97aveou7xd62qsx1kfZ systemd[1]: Failed to start Simple Python Service.
Nov 27 22:10:04 iZwz97aveou7xd62qsx1kfZ systemd[1]: Started Simple Python Service.
Nov 27 22:13:47 iZwz97aveou7xd62qsx1kfZ systemd[1]: Stopping Simple Python Service...
Nov 27 22:13:47 iZwz97aveou7xd62qsx1kfZ systemd[1]: Stopped Simple Python Service.
(base) root@iZwz97aveou7xd62qsx1kfZ:~# systemctl start simple-python
(base) root@iZwz97aveou7xd62qsx1kfZ:~# systemctl status simple-python
● simple-python.service - Simple Python Service
Loaded: loaded (/etc/systemd/system/simple-python.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2025-11-27 22:13:56 CST; 1s ago
Main PID: 16715 (python3)
Tasks: 1 (limit: 2235)
CGroup: /system.slice/simple-python.service
└─16715 /usr/bin/python3 /root/simple-service.py
Nov 27 22:13:56 iZwz97aveou7xd62qsx1kfZ systemd[1]: Started Simple Python Service.
(base) root@iZwz97aveou7xd62qsx1kfZ:~#
小结: systemd-python为Python开发者打开了一扇通往系统管理的新大门。无论是日志分析、服务监控,还是系统状态管理,它都能提供强大而灵活的支持。可以让Python的强大生态与systemd的系统管理能力完美结合,打造属于专属智能运维工具!
温馨提示:在生产环境使用前,请务必在测试环境中充分验证,确保脚本的稳定性和安全性。
更多推荐
所有评论(0)