Linux 入门:用 systemd 把自己的脚本变成开机自启的后台服务

举报
yd_226410095 发表于 2026/10/24 06:10:38 2026/10/24
【摘要】 以一个最小示例为主线,讲解如何编写 systemd service 文件,让自己的脚本开机自启、异常自动重启,并用 journalctl 查看日志和排错。

刚接触 Linux 的同学常遇到这样的需求:写了一个 Python 或 Shell 脚本,希望它开机自动运行、崩溃后能自己重启,还能方便地查看日志。在主流发行版(Ubuntu、Debian、CentOS、openEuler 等)里,最规范的做法就是使用 systemd 创建一个服务单元(unit)。本文用一个最小示例,带你走通整个流程。

一、准备一个测试脚本

先写一个每隔 10 秒输出一行时间的脚本,放在 /opt/demo/hello.sh:

#!/bin/bash
while true; do
  echo "hello at $(date '+%F %T')"
  sleep 10
done

记得执行 chmod +x /opt/demo/hello.sh,让它拥有可执行权限。

二、编写 service 文件

用 root 或 sudo 创建 /etc/systemd/system/hello.service,内容如下:

[Unit]
Description=Hello demo service
After=network.target

[Service]
Type=simple
ExecStart=/opt/demo/hello.sh
Restart=on-failure
RestartSec=5
User=nobody

[Install]
WantedBy=multi-user.target

几个关键字段的含义:After 表示在网络就绪之后再启动;ExecStart 必须写脚本的绝对路径;Restart=on-failure 表示异常退出时自动重启,RestartSec 是重启前等待的秒数;User 指定运行身份,尽量不要用 root,这是最小权限原则;WantedBy=multi-user.target 表示在正常多用户模式下随系统启动。

三、加载并启动服务

sudo systemctl daemon-reload
sudo systemctl enable --now hello.service
systemctl status hello.service

daemon-reload 让 systemd 重新读取配置;enable 设置开机自启,--now 则表示同时立即启动。状态显示 active (running) 就说明成功了。

四、查看日志与排错

systemd 会把标准输出统一交给 journald 管理,用下面的命令即可实时查看:

journalctl -u hello.service -f

如果服务启动失败,先看 systemctl status 里的报错,常见原因有三类:脚本没有执行权限、ExecStart 写成了相对路径、运行用户对目录没有读写权限。修改 service 文件后,别忘了再执行一次 daemon-reload 并 restart。

五、小结

掌握 systemctl 的 start、stop、restart、enable、disable、status 六个子命令,再配合 journalctl 看日志,就能管理绝大多数后台程序。后续你可以把这个模板用在自己的 Web 服务、定时采集脚本或者 AI 模型推理服务上。希望这篇入门笔记对刚学 Linux 的朋友有帮助,欢迎在评论区交流。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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