当前位置: 首页 > news >正文

使用 systemd 管理 Python 项目(示例:confhub-sync)

 

使用 systemd 管理 Python 项目(示例:confhub-sync)

 

 

在 CentOS/AlmaLinux 9 上,可以用 systemd 代替 supervisor 来管理 Python 项目。下面是我配置的 myapp-confhub-sync.service 示例,路径按实际环境调整。

 


 

 

配置文件:

/etc/systemd/system/myapp-confhub-sync.service

 

[Unit]
Description=MyApp - confhub-sync (Python, conda py312)
After=network-online.target
Wants=network-online.target# ——启动风暴抑制(在 [Unit] 段生效)——
# StartLimitIntervalSec:统计窗口(这里 30 秒内)
# StartLimitBurst:窗口内允许的“自动重启/失败启动”次数上限
# 超过则进入抑制,直到窗口过期或手动 reset-failed
StartLimitIntervalSec=30s
StartLimitBurst=5[Service]
# ——运行目录 & 环境——
WorkingDirectory=/opt/genesis/confhub-sync
EnvironmentFile=-/opt/genesis/confhub-sync/.env
Environment=PYTHONUNBUFFERED=1
# 将 env 的 bin 置于 PATH 前,便于子进程用到该环境内的可执行文件
Environment=PATH=/opt/anaconda3/envs/py312/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin# ——启动命令——
ExecStart=/opt/anaconda3/envs/py312/bin/python /opt/genesis/confhub-sync/__main__.py# ——进程管理策略——
# Restart 的可选值:
#   no          → 不自动重启(默认)
#   always      → 无论正常/异常退出都重启
#   on-success  → 仅正常退出 (code=0) 时重启
#   on-failure  → (推荐)异常退出、信号终止、超时等失败场景重启
#   on-abnormal → 仅异常信号导致退出时重启
#   on-abort    → 仅“非正常信号”导致退出时重启(不含 TERM/INT)
#   on-watchdog → 仅看门狗超时触发(需 WatchdogSec 配合)
Restart=no# RestartSec:发生重启时,等待多久再拉起(对 Restart=no 无效)
RestartSec=2s# TimeoutStopSec:执行 `systemctl stop` 时,先发 SIGTERM;
# 若超时未退出,则发 SIGKILL 强制杀掉。
TimeoutStopSec=20s# ——安全/隔离选项——
NoNewPrivileges=true    # 禁止进程获取更高权限
PrivateTmp=true         # 给进程单独的 /tmp
ProtectSystem=full      # 根目录大部分只读
ProtectHome=false       # 如需访问 /root/.ssh,设为 false,否则建议设为 true
Environment=HOME=/root
ReadWritePaths=/opt/genesis/confhub-sync   # 允许写入的白名单目录# ——日志——
# 默认 stdout/stderr 进入 journald(可配置持久化+限额)
# 如需对日志节流可启用:
# LogRateLimitIntervalSec=30s
# LogRateLimitBurst=200[Install]
WantedBy=multi-user.target

 


 

 

常用操作

 

# 保存文件后刷新 systemd
systemctl daemon-reload# 启动服务
systemctl start myapp-confhub-sync.service# 设置开机自启
systemctl enable myapp-confhub-sync.service# 查看服务状态
systemctl status myapp-confhub-sync.service --no-pager# 查看日志(精确到毫秒,实时跟随)
journalctl -u myapp-confhub-sync.service -o short-precise -f

 


 

 

小结

 

 

  • 这种方式比 supervisor 更轻量,直接依托 systemd。

  • 日志统一进入 journald,可以设置持久化和限额。

  • Restart 策略灵活,能实现和 supervisor 类似的守护功能。

  • 结合 SELinux 正确标签(restorecon -RFv /opt/...),可以在 Enforcing 模式下稳定运行。

 

 


 

要不要我再帮你整理一份 “最小精简版”配置(只保留必要选项,适合博客里快速复制粘贴的)?

http://www.rkmt.cn/news/5459.html

相关文章:

  • 9.15模拟赛总结
  • ECT-OS-JiuHuaShan框架,将会是全球推理之源,无需数据训练,只需数据检索和校验。彻底颠覆概率云ai
  • 如何正确使用mysql
  • qoj4239 MST
  • 第一篇博客
  • springboot的启动流程
  • 「微积分 A1」基础知识(连载中)
  • 萤火虫文旅年票、为什么能做到低至4.2元一张景区门票、还能高达50%的毛利润?
  • SAP 采购订单税率及含税金额取数
  • Jenkins 容器和 Kubernetes Agent
  • LGP7916 [CSP-S 2021] 交通规划 学习笔记
  • 详细介绍:【Kubernetes】常见面试题汇总(十四)
  • 教育行业API安全最佳实践:全知科技以国家标准引领数据防护新范式
  • Qt处理USB摄像头开发说明与QtMultimedia与V4L2融合应用
  • 拾忆录
  • 从零搭建RAG应用:跳过LangChain,掌握文本分块、向量检索、指代消解等核心技术实现
  • python高阶技巧
  • CSS纯文本渐变动效
  • Redssion
  • 提升系统可靠性:Air8000多串口硬件设计的黄金法则
  • 20250915笔记
  • enumerate函数
  • HyperWorks许可激活
  • OpenStack Nova instance 常见操作
  • 线性规划
  • 伪代码学习总结
  • 麒麟
  • 多品牌摄像机视频平台EasyCVR海康大华宇视视频平台统一接入方案
  • ubuntu安装mysql矩阵
  • 043-WEB攻防-PHP应用SQL注入符号拼接请求方法HTTP头JSON编码类