Go 打包后的二进制文件添加到 CentOS 开机启动项
前提需要学习:
Go 打包后的二进制文件添加到开机启动项
httpbin-go 是一个 Go 项目生成的二进制文件,或者称为可执行文件,需要添加可执行权限。
正常我们执行一个可执行文件可能是这样 ./httpbin-go
,这样服务也能跑起来。但服务器经常需要重启,常用的服务我们不可能每次都手动启动,往往会添加开机启动项。好像比较老旧的方式是通过写脚本来操作,同事推荐使用 systemd
来统一管理 Linux 上的服务,也是目前比较流行的方式。阮一峰老师的两篇博客介绍的很详细啦。
那我们想把自己写的 Go 服务部署到服务器,并且让它开机自启动 应该怎么办呢?
1. 把可执行文件配置成一个 service
编写 httpbin-go.service 文件,完成后放在 /usr/lib/systemd/system/
。
1 | [Unit] |
[Unit] :
Description 服务的描述信息
After 依赖关系
[Service]:
Type 启动类型:(默认值):
ExecStart
字段启动的进程为主进程WorkingDirectory 服务的工作目录
ExecStart 可执行文件所在的位置
Restart 重启行为:
on-failure
表示任何意外的失败,就将重启 httpbin-go
[Install]:
- WantedBy 表示该服务所在的 Target
Target
的含义是服务组,表示一组服务。WantedBy=multi-user.target
指的是,sshd 所在的 Target 是multi-user.target
。
这个设置非常重要,因为执行systemctl enable httpbin-go.service
命令时,httpbin-go.service
的一个符号链接,就会放在/etc/systemd/system
目录下面的multi-user.target.wants
子目录之中。
Systemd 有默认的启动 Target。
1 | systemctl get-default |
上面的结果表示,默认的启动 Target 是multi-user.target
。在这个组里的所有服务,都将开机启动。这就是为什么systemctl enable
命令能设置开机启动的原因。
2. 添加开机启动项
systemd 默认从这个目录读取配置文件:
/etc/systemd/system/
但是,里面存放的大部分文件都是符号链接,真正的配置文件存放在这个目录:
/usr/lib/systemd/system/
systemctl enable 命令用于在上面两个目录之间,建立符号链接关系。
1 | systemctl enable httpbin-go.service |
以上 Go 二进制文件就可以开机自启动了。
本文小工具地址:httpbin-go