Python项目后台服务托管设置:从零配置自启动守护进程

开发好的Python项目如果只是跑在终端里,关掉窗口或掉线就会终止。
想要稳定运行,需要把项目注册为系统后台服务。
本文从零演示两种最常用的托管方式:systemd(CentOS 7+/Ubuntu 16+自带)和supervisor(更通用的进程管理工具),适合新手直接照做。

先确认这三样东西

动手前检查下面几项:

  • 服务器系统:推荐Ubuntu 20.04+或CentOS 7+,本文命令基于这两类系统。
  • Python环境:确认项目需要的Python版本已安装,且虚拟环境已激活。
  • 项目入口:定位到你的启动脚本,例如 /home/myuser/project/app.py,确保能手动 python app.py 正常运行。
  • sudo权限:注册服务需要root或sudo。

如果项目依赖第三方包,先 pip install -r requirements.txt 安装好。

用systemd写一个.service文件

systemd是大多数现代Linux发行版的服务管理器。
创建一个服务单元文件:

sudo vim /etc/systemd/system/myproject.service

写入以下内容(请替换路径和用户名):

[Unit]
Description=My Python Project Service
After=network.target

[Service]
User=myuser
WorkingDirectory=/home/myuser/project
ExecStart=/home/myuser/project/venv/bin/python /home/myuser/project/app.py
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

关键字段解释:

  • User:运行服务的系统用户,避免使用root。
  • WorkingDirectory:项目目录,方便路径引用。
  • ExecStart:启动命令,一定要用虚拟环境中的Python解释器,否则可能报模块找不到。
  • Restart=always:进程意外退出后自动重启。
  • RestartSec=5:重启前等待5秒。

保存文件后执行:

sudo systemctl daemon-reload
sudo systemctl enable myproject.service   # 设置开机自启
sudo systemctl start myproject.service    # 启动服务

备选方案:用supervisor托管

如果服务器是旧系统或你想统一管理多个Python进程,supervisor更灵活。
安装:

# Ubuntu/Debian
sudo apt install supervisor -y
# CentOS/RHEL
sudo yum install supervisor -y

生成配置文件,推荐写在 /etc/supervisor/conf.d/ 下:

sudo vim /etc/supervisor/conf.d/myproject.conf

内容示例:

[program:myproject]
command=/home/myuser/project/venv/bin/python /home/myuser/project/app.py
directory=/home/myuser/project
user=myuser
autostart=true
autorestart=true
startsecs=5
stderr_logfile=/var/log/myproject.err.log
stdout_logfile=/var/log/myproject.out.log

加载并启动:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myproject

之后用 sudo supervisorctl status 查看所有进程状态。

常踩的坑和解决办法

  • 报错 ModuleNotFoundError:检查service中的 ExecStart 是否用了全局Python而非虚拟环境的。建议用 which python 确认虚拟环境路径。
  • 权限不足:日志路径、目录读写权限记得给 User 指定用户。如果服务用root启动,之后改日志目录可能会报Permission denied。
  • 环境变量缺失:如果代码读取了 .env 文件或环境变量,在systemd的 [Service] 段加 EnvironmentFile=/path/to/.env
  • systemd启动失败但无提示:运行 sudo journalctl -u myproject.service -n 30 查看具体错误。
  • supervisor启动后进程一直重启:检查 command 是否写对了,或者程序本身启动后立即退出,可先在终端手动跑一次看输出。

验证服务是否在后台跑

无论用systemd还是supervisor,确认服务正常运行的方法:

  • curl 或浏览器访问项目提供的端口(如Flask的5000,Django的8000)。
  • 检查进程存在:ps aux | grep python 应该看到你的项目进程。
  • 关机重启后,再次登录执行 systemctl status myprojectsupervisorctl status,状态应为 active (running)
  • 故意杀死进程:sudo kill ,观察systemd或supervisor会自动拉起来。

如果你正在处理Python项目后台服务托管设置,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
把服务注册好后,后续更新代码只要重启服务就好,非常省心。

分享到:
上一篇
Java项目Tomcat部署运维指南
下一篇
闲置旧主机改造家用服务器教程指南
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意