1. 项目背景与需求分析
在Ubuntu 24.04系统中,我们经常需要将基于Python开发的后台服务设置为开机自启动。特别是当服务之间存在依赖关系时——比如本文案例中的Python程序需要等待ollama服务启动完成后才能运行——就需要更精细的启动顺序控制。
传统的方式是在rc.local或crontab中简单添加启动命令,但这种方法存在明显缺陷:
- 无法管理服务依赖关系
- 缺乏服务状态监控和自动恢复机制
- 日志记录不够规范
- 难以统一管理多个服务
Systemd作为现代Linux系统的服务管理器,提供了完善的解决方案。它能:
- 精确控制服务启动顺序(通过After/Wants指令)
- 自动重启崩溃的服务(Restart策略)
- 集中管理日志输出
- 提供统一的服务状态查询接口
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与路径确认
2.1 Conda虚拟环境检查
首先确保你的Python程序运行在正确的Conda虚拟环境中:
bash复制# 激活目标环境
conda activate python3-9-21
# 验证Python解释器路径
which python
# 典型输出示例:/home/user/huanjing/conda/yes/envs/python3-9-21/bin/python
注意:如果which python返回的是系统Python路径(如/usr/bin/python),说明环境未正确激活,需要检查conda环境是否创建成功。
2.2 项目目录结构规范
建议采用以下目录结构组织项目:
code复制/home/user/project/
├── src/ # 源代码目录
│ └── main.py # 主程序入口
├── logs/ # 日志目录(需提前创建)
├── config/ # 配置文件目录
└── requirements.txt # 依赖清单
创建日志目录并设置权限:
bash复制mkdir -p /home/user/project/logs
chown user:user /home/user/project/logs # 替换为你的实际用户名
