conda项目设置为systemctl管理任务

确认 conda 环境的路径
首先,找到您使用的 conda 环境的绝对路径。假设您的环境名为 myenv,可以通过以下命令查看:

bash
conda info --envs
输出类似:

text
myenv /home/your_user/miniconda3/envs/myenv
记录下这个路径,例如 /home/your_user/miniconda3/envs/myenv。

  1. 编写 systemd 服务文件
    创建一个新的服务文件,例如 /etc/systemd/system/myapp.service(文件名可自定,后缀必须为 .service)。您需要使用 sudo 权限创建和编辑该文件。

ini
[Unit]
Description=My FastAPI application with Uvicorn
After=network.target

[Service]
Type=simple
User=your_user # 改为运行服务的用户
Group=your_group # 改为用户组(可选)
WorkingDirectory=/path/to/your/project # 改为您的项目目录

方式一:直接使用 uvicorn 可执行文件(推荐)

ExecStart=/home/your_user/miniconda3/envs/myenv/bin/uvicorn app.main:app --host 0.0.0.0 --port 33332

方式二:通过 python -m uvicorn(备用)

ExecStart=/home/your_user/miniconda3/envs/myenv/bin/python -m uvicorn app.main:app --host 0.0.0.0 --port 33332

Restart=always # 自动重启
RestartSec=5 # 重启前等待5秒
StandardOutput=journal # 输出到 systemd 日志
StandardError=journal

[Install]
WantedBy=multi-user.target
关键点说明:
User/Group:建议使用非 root 用户运行,避免权限问题。确保该用户对项目目录和 conda 环境有读取/执行权限。

WorkingDirectory:设置为您的项目根目录,这样 uvicorn 才能正确找到 app.main 模块。

ExecStart:使用 conda 环境中的绝对路径执行 uvicorn(或 Python 模块)。这不需要手动激活 conda 环境。

Restart:always 保证服务意外退出时自动重启,效果类似 nohup 但更可靠。

StandardOutput/Error:将日志交给 systemd 的 journal 管理,方便查看。

  1. 加载并启动服务
    创建好服务文件后,执行以下命令:

bash

重新加载 systemd 配置,让新服务生效

sudo systemctl daemon-reload

启动服务

sudo systemctl start myapp

查看服务状态(确认是否正常运行)

sudo systemctl status myapp

设置开机自启

sudo systemctl enable myapp
4. 常用管理命令
启动:sudo systemctl start myapp

停止:sudo systemctl stop myapp

重启:sudo systemctl restart myapp

查看状态:sudo systemctl status myapp

查看实时日志:sudo journalctl -u myapp -f

posted @ 2026-03-29 17:54  竹石2020  阅读(13)  评论(0)    收藏  举报