systemd 实战:三步把 Python 脚本变成开机自启的稳定服务

举报
yd_266952352 发表于 2026/11/04 15:41:49 2026/11/04
【摘要】 很多人用 nohup 挂后台脚本,重启就丢、崩了没人管。本文用三个步骤把任意 Python 脚本注册成 systemd 服务:编写 unit 文件、设置开机自启、用 journalctl 排查日志,并给出最常见的几个踩坑点。

在服务器上跑 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 稳得多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。