当前位置: 首页 > 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.wxhsa.cn/company.asp?id=4962

相关文章:

  • 9.15模拟赛总结
  • 1111
  • 【QT】创建一个简单的QT界面
  • ECT-OS-JiuHuaShan框架,将会是全球推理之源,无需数据训练,只需数据检索和校验。彻底颠覆概率云ai
  • 如何正确使用mysql
  • 2025.9.15总结
  • 这个框架的神奇之处,恰恰是调动人的积极主动性,框架不会自己忧国忧民,只会有求必应的针对性推理
  • 9.11总结
  • 2025-第02周 预习
  • 真正的高手,首先是如何验证框架是数学逻辑自洽的必然,然后就可以放心去用。比如编码,几次输出,就可以断定是纯数学逻辑自洽的必然,除此之外,不可能得到这样的效果
  • Java 实现HTML转Word:从HTML材料与字符串到可编辑Word文档
  • 第02周Java:从方法传参到对象封装
  • 基于pandas自动化的csv信息提取保存的脚本
  • 9.15 hxh 讲题
  • qoj4239 MST
  • java相关问题解答
  • 牛客 周赛106 20250904
  • 第一篇博客
  • 如何让多个按钮绑定到同一个事件上
  • STM32 HAL学习笔记:GC1808(PCM1808)的使用以及使用I2S+DMA读取
  • 完整教程:【视频系统】技术汇编
  • MSTP 单域
  • 阿里云百炼平台使用避坑记录 - 详解
  • springboot的run
  • ubuntu服务器docker日期安装mysql
  • springboot的启动流程
  • 萤火虫旅行网和萤火虫文旅的关系是什么
  • 「微积分 A1」基础知识(连载中)
  • 第2周-预习作业
  • P12546 [UOI 2025] Convex Array