用 systemd 托管 Python AI 小工具
用 systemd 托管 Python AI 小工具
很多 Python AI 小工具在终端里能跑,但一关窗口就停;想让它开机自启、崩溃后自动拉起,又不想引入复杂平台。Linux 自带的 systemd 就够用。下面以一个图片分类脚本为例,演示从虚拟环境到守护服务的完整流程。
先准备目录和虚拟环境。把工具放在 /opt/ai-tool,用 venv 隔离依赖:
sudo mkdir -p /opt/ai-tool sudo python3 -m venv /opt/ai-tool/venv sudo /opt/ai-tool/venv/bin/pip install transformers torch pillow
脚本 classify.py 扫描指定目录中的图片,调用 Transformers 的图像分类管道,把结果写入标准输出:
from pathlib import Path from transformers import pipeline clf = pipeline("image-classification", model="google/vit-base-patch16-224") for img in Path("/opt/ai-tool/images").glob("*.jpg"): top = clf(str(img))[0] print(f"{img.name}\t{top['label']}\t{top['score']:.4f}", flush=True)
手动运行确认无误后,创建 systemd 单元文件 /etc/systemd/system/ai-classify.service:
[Unit] Description=AI image classify tool After=network-online.target [Service] Type=simple User=aiuser WorkingDirectory=/opt/ai-tool ExecStart=/opt/ai-tool/venv/bin/python /opt/ai-tool/classify.py Restart=on-failure RestartSec=5 Environment=HF_HOME=/opt/ai-tool/.cache [Install] WantedBy=multi-user.target
几个细节很关键。ExecStart 必须写虚拟环境里 Python 的绝对路径,否则可能用到系统 Python;WorkingDirectory 和模型缓存目录要提前创建,并让专用用户 aiuser 有读写权限;Restart=on-failure 能在脚本异常退出时自动重启,但不要设置得过快,避免反复崩溃刷日志。若工具需要读取环境变量,可在单元里用 Environment 声明,而不是依赖登录 shell 的配置。
启用并查看状态:
sudo systemctl daemon-reload sudo systemctl enable --now ai-classify sudo systemctl status ai-classify journalctl -u ai-classify -f
修改代码后执行 sudo systemctl restart ai-classify 即可生效。日志统一走 journald,脚本里用 print(..., flush=True) 能及时看到输出;生产环境应控制日志量,避免把大段推理结果全部打进系统日志。如果只是每天定时批处理,不必常驻服务,可以改用 systemd timer 触发一次性任务。需要交互输入的 CLI 工具也不适合这样托管。
这个方案没有容器那么强的隔离性,但胜在轻量、直接、与 Linux 集成好。对入门者来说,先把 Python AI 小工具变成可管理、可观测、能自恢复的服务,比急着上复杂编排平台更实用。
- 点赞
- 收藏
- 关注作者
评论(0)