systemd 入门:用 systemctl 把你的脚本变成开机自启的服务
很多开发者都遇到过这样的场景:写了一个监控脚本或者一个小工具,每次服务器重启后就要手动跑一遍,忘了就出事。其实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。
- 点赞
- 收藏
- 关注作者
评论(0)