conda项目设置为systemctl管理任务
确认 conda 环境的路径
首先,找到您使用的 conda 环境的绝对路径。假设您的环境名为 myenv,可以通过以下命令查看:
bash
conda info --envs
输出类似:
text
myenv /home/your_user/miniconda3/envs/myenv
记录下这个路径,例如 /home/your_user/miniconda3/envs/myenv。
- 编写 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 管理,方便查看。
- 加载并启动服务
创建好服务文件后,执行以下命令:
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
本文来自博客园,作者:竹石2020,转载请注明原文链接:https://www.cnblogs.com/ch2020/p/19791815
浙公网安备 33010602011771号