系统环境: Ubuntu 18.04 TLC

*注意:程序中如果有配置文件,注意一下路径

*将脚本Type参数设置为forking的时候会出现未知bug,导致自动重启失败,可能守护的程序必须是进程守护(daemon)的时候才不会出现这个bug

测试项目: 一个 Go语言写的 web Demo,反正能跑起来就行了

package main
import "github.com/gin-gonic/gin"
func main() {
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
            c.JSON(200, gin.H{
                    "message": "Hello, Lisa.",
            })
    })
    r.Run(":8081")
}

我 go build得到的可执行文件放在 /gopath/src/wz下

新建 systemd的 service

首先新建 service,名称叫做 wz

touch /lib/systemd/system/wz.service

然后 sudo vi /lib/systemd/system/wz.service 编辑这个文件

[Unit]
Description=wz web server
After=network.target

[Service]
User=root
Type=simple
Restart=always
RestartSec=3
ExecStart=/gopath/src/wz/wz

[Install]
WantedBy=multi-user.target

重新加载配置文件: sudo systemctl daemon-reload

开机自启: systemctl enable wz.service
启动脚本: systemctl start wz.service

执行systemctl start wz.service命令以后,有可能启动失败,因此要用systemctl status命令查看一下该服务的状态。

查看运行状态: systemctl status wz.service

运行正常会返回数据:

root@time:/gopath/src/wz# systemctl status wz.service
● wz.service - wz web server
   Loaded: loaded (/lib/systemd/system/wz.service; enabled; vendor preset: enabled)
   Active: activating (start) since Mon 2020-04-13 10:39:57 CST; 1min 5s ago
Cntrl PID: 39880 (wz)
    Tasks: 7 (limit: 2293)
   CGroup: /system.slice/wz.service
           └─39880 /gopath/src/wz/wz

4月 13 10:39:57 time systemd[1]: Starting wz web server...
4月 13 10:39:57 time wz[39880]: [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware 
4月 13 10:39:57 time wz[39880]: [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
4月 13 10:39:57 time wz[39880]:  - using env:        export GIN_MODE=release
4月 13 10:39:57 time wz[39880]:  - using code:        gin.SetMode(gin.ReleaseMode)
4月 13 10:39:57 time wz[39880]: [GIN-debug] GET    /                         --> main.main.func1 (3 handlers)
4月 13 10:39:57 time wz[39880]: [GIN-debug] Listening and serving HTTP on :8081
lines 1-15/15 (END)

然后sudo lsof -i查看进程中有没有这个程序,如果存在的话试试 kill掉后能不能正常自动拉起程序

systemd的介绍及参考:
注意:用法仅供参考,请根据自己需要修改
[1]Systemd 配置 https://www.cnblogs.com/pirlo21/p/10147990.html
[2]Systemd 入门教程:命令篇 http://www.bejson.com/doc/systemd/showList()
[3]Systemd 集成 Go 应用程序 https://liqiang.io/post/run-golang-binary-with-systemd
[4]systemd.service 中文手册 http://www.jinbuguo.com/systemd/systemd.service.html
[5]Systemd集成Golang程序 http://www.manongjc.com/detail/9-owqdlywhsaaqsne.html
[6]systemd #system daemon系统守护进程 https://www.cnblogs.com/Forsake-dream/p/9980234.html
[7]systemctl 针对 service 类型的配置文件 https://blog.csdn.net/whimewcm/article/details/83153817

标签: none

添加新评论