0. golang程序
package main
import (
log "github.com/sirupsen/logrus"
"time"
)
func main() {
for {
log.Infof("hello, %v", time.Now())
time.Sleep(5*time.Second)
}
}
编译安装
go build -o myApp
sudo install myApp /usr/local/myApp
1. 编写unit service
服务分为系统服务和用户服务,系统服务开机不登陆就能运行,常用于开机自启。
系统服务目录:/usr/lib/systemd/system/
用户服务目录:/usr/lib/systemd/user/
我们想新建一个开机自启动的服务,在/usr/lib/systemd/system
目录下新建myapp.service`文件
[UNIT]
#服务描述
Description=My App Service
#指定了在systemd在执行完那些target之后再启动该服务
#network-online.target 指定网络服务配置完成后再启动
After=network-online.target
Wants=network-online.target
[Service]
#默认值,ExecStart字段启动的进程为主进程
Type=simple
#定义systemctl start|stop|reload xxxxx.service 执行的命令(需要写绝对路径)
#启动前执行的命令
#ExecStartPre=
ExecStart=/usr/local/myApp
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
#只杀主进程
KillMode=process
#异常退出时重启
Restart=on-failure
RestartSec=5s
#创建私有的内存临时空间
PrivateTmp=True
[Install]
#表示多用户命令行状态
WantedBy=multi-user.target
2. 设置systemd
# 新增xxx.service文件需要reload一下
systemctl daemon-reload
# 设置开机启动
systemctl enable myapp.service
# 启动服务
systemctl start myApp
# 停止服务
systemctl stop myApp
# 重启服务
systemctl restart myApp
3. 查看日志
journalctl -u myApp.service -n 20
参考资料
https://www.jianshu.com/p/79059b06a121
https://winddoing.github.io/post/50280.html
https://www.cnblogs.com/jhxxb/p/10654554.html