systemd 入门:用 systemctl 把你的脚本变成开机自启的服务

举报
搞点薯条 发表于 2026/11/12 09:23:48 2026/11/12
【摘要】 很多开发者都遇到过这样的场景:写了一个监控脚本或者一个小工具,每次服务器重启后就要手动跑一遍,忘了就出事。其实Linux早就内置了解决方案,那就是systemd。今天用最短的路,带你把任意脚本变成一个开机自启、崩溃自动重启的正规服务。一、先准备一个脚本。假设我们有一个简单的健康检查脚本,放在 /opt/mytools/check.sh,记得给它加上可执行权限:chmod +x /opt/my...

很多开发者都遇到过这样的场景:写了一个监控脚本或者一个小工具,每次服务器重启后就要手动跑一遍,忘了就出事。其实Linux早就内置了解决方案,那就是systemd。今天用最短的路,带你把任意脚本变成一个开机自启、崩溃自动重启的正规服务。

一、先准备一个脚本。假设我们有一个简单的健康检查脚本,放在 /opt/mytools/check.sh,记得给它加上可执行权限:chmod +x /opt/mytools/check.sh。脚本内容不重要,重要的是它能在前台持续运行,这是被systemd托管的前提。

二、写一个service单元文件。在 /etc/systemd/system/ 目录下新建 check.service,内容只需要几行:[Unit]段写Description描述;[Service]段写ExecStart=/opt/mytools/check.sh,再加上Restart=on-failure,意思是进程异常退出时自动拉起;[Install]段写WantedBy=multi-user.target,表示随系统多用户模式启动。

三、让配置生效。执行 systemctl daemon-reload 重新加载单元文件,然后 systemctl enable --now check.service,这一条命令同时完成设置开机自启和立即启动。想看运行状态就用 systemctl status check.service,日志用 journalctl -u check.service -f 实时追踪,比翻log文件清爽多了。

四、几个容易踩的坑。第一,脚本路径必须用绝对路径,systemd不会继承你的shell环境变量;第二,如果脚本依赖环境变量,可以在service文件里用Environment=或EnvironmentFile=来声明;第三,Restart=always和on-failure的区别是前者无论正常退出还是异常退出都重启,按需选择;第四,改了service文件之后一定要daemon-reload,否则改了也不生效。

掌握这套流程之后,无论是一个Python采集程序、一个Node接口服务还是一段备份脚本,都可以用同样的模板管起来。systemd还支持依赖编排、资源限制、定时任务(timer)等进阶玩法,感兴趣可以在评论区交流,下一篇可以展开讲讲systemd timer如何替代crontab。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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