Linux使用 Systemd 管理 Conda 环境下的 Flask 应用,守护进程

2026-03-19

创建 Systemd 服务文件

vim /etc/systemd/system/test_app.service

编写服务配置

[Unit]
Description=XXX App in Miniconda
# 确保网络已就绪后再启动应用
After=network.target

[Service]
User=root
Group=root
# 设置工作目录为你的项目根目录
WorkingDirectory=/data/xxx

# 核心:通过bash启动,先激活Conda环境,再运行Python程序
# 这种方式能正确加载Conda环境变量
ExecStart=/bin/bash -c '/usr/local/miniconda3/envs/xxx_env/bin/python /data/xxx/main.py'

# 重启策略:如果进程退出(无论是正常退出还是崩溃),总是重启
Restart=always
# 在重启前等待10秒,防止频繁重启
RestartSec=10

# 如果程序崩溃,将标准输出和错误输出都记录到日志文件中(可选)
StandardOutput=append:/data/xxx/out.log
StandardError=append:/data/xxx/err.log

# 指定环境变量(可选,比如Flask的运行端口)
# Environment="PATH=/usr/local/cuda-12.6/bin:$PATH"
# Environment="LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH"

[Install]
# 设置为多用户模式下启动,即开机自启
WantedBy=multi-user.target

重载配置并启动服务

# 重新加载systemd配置,让新创建的服务文件生效
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start myflaskapp

# 设置服务开机自启
sudo systemctl enable myflaskapp