Scott

使用flag让程序更灵活 2 years ago

go
692个字符
共有115人围观

你是否遇到这样的情形,费了好大功夫把服务部署上线,但是某一时刻因为停电而导致服务挂掉

通电后,你又把之前的动作给做了一遍,这种重复性工作不仅耗时,还有可能出错; 有人说我可以写个脚本让它自己去操作,但是还是需要手动去开启服务

我们的目标是无需人为干预,开机自动启动服务

你可以借用docker或者crontab来达到开机自动启动的目的

但是crontab有个缺陷

实际部署时,由于各机器运行环境大不相同, 而且服务器启动的时候又拿不到$PATH,为避免机械硬编码,可借用flag包,把系统重启时拿不到的环境变量写在配置文件里

这样稍微配置一下crontab就可以达到开机自动重启服务的目的

以下是个小demo, 默认它会读取项目目录下的config.json, 服务真正上线时需要用-c指定配置文件的位置

package main

import (
  "flag"
  "fmt"
)

func main() {
  var myConfigFile string
  flag.StringVar(&myConfigFile, "c", "./config.json", "the position of the config file")
  flag.Parse()
  fmt.Println(myConfigFile) //go run main.go -c /some/path/file
}