systemd 实战:三步把 Python 脚本变成开机自启的稳定服务
在服务器上跑 Python 脚本,最怕两件事:SSH 断开进程跟着死,机器重启后没人拉起来。nohup 加 & 只解决了第一件,第二件还得靠 systemd。
第一步:写 unit 文件。在 /etc/systemd/system/ 下创建 myjob.service,三个区块缺一不可。[Unit] 里写 Description 方便识别;[Service] 里 ExecStart 填绝对路径的 python 和脚本路径,务必用虚拟环境里的解释器,例如 /opt/venv/bin/python;WorkingDirectory 设成脚本所在目录,避免相对路径读不到配置;再加 Restart=always 和 RestartSec=5,进程崩掉五秒后自动拉起。[Install] 里 WantedBy=multi-user.target 表示随系统启动。
第二步:启用并启动。先 daemon-reload 让 systemd 重新扫描配置,再 enable --now 一次完成开机自启和立即启动。改过配置后记得再次 reload,否则改动不生效。
第三步:看日志。不用再去翻 nohup.out,journalctl -u myjob -f 直接跟最新输出;加 --since today 只看今天的。日志乱码或缓冲导致的延迟,可以在环境里加 PYTHONUNBUFFERED=1。
三个常见坑:一是 ExecStart 不接受 shell 语法,管道和重定向要包一层 /bin/bash -c;二是脚本里写死相对路径导致找不到文件,用 WorkingDirectory 解决;三是环境变量缺失,用 Environment= 或 EnvironmentFile 注入,别依赖 .bashrc。
照这三步做完,脚本就具备了开机自启、崩溃重启、日志可查三个能力,比裸跑 nohup 稳得多。
- 点赞
- 收藏
- 关注作者
评论(0)