golang进阶(三)——后台进程的启动和停止

golang进阶(三)——后台进程的启动和停止,第1张

概述原文链接 +++  title=”golang进阶(三)——后台进程的启动和停止”  date=”2017-10-12”  tags=[“golang”,”cobra”]  categories=[“资源管理”]  description=”不想再像java或者其他语言那样为了 *** 作后台程序写各种脚本的话,这篇文章值得你一看”  featured=true  image=”img/201710/fe

原文链接


+++
Title=”golang进阶(三)——后台进程的启动和停止”
date=”2017-10-12”
Tags=[“golang”,”cobra”]
categorIEs=[“资源管理”]
description=”不想再像java或者其他语言那样为了 *** 作后台程序写各种脚本的话,这篇文章值得你一看”
featured=true
image=”img/201710/fengjing2.jpg”
+++
不想再像java或者其他语言那样为了 *** 作后台程序写各种脚本的话,这篇文章值得你一看 启动命令 和上一篇文章一样,我们先来个非后台运行的启动命令 func init() {
startCmd := &cobra.Command{
Use: "start",
Short: "Start Gonne",serif; Font-size:12px; line-height:1.8em"> Run: func(cmd *cobra.Command,args []string) {
starthttp()
},serif; Font-size:12px; line-height:1.8em"> }
startCmd.Flags().BoolVarP(&daemon,"deamon","d",false,"is daemon?")
RootCmd.AddCommand(startCmd)

} 复制代码 starthttp方法启动一个http的web服务 func starthttp() {
http.HandleFunc("/",func(w http.ResponseWriter,r *http.Request) {
fmt.Fprintf(w,"Hello cmd!")
})
if err := http.ListenAndServe(":9090",nil); err != nil {
log.Fatal("ListenAndServe: ",err)
复制代码 现在通过gonne start便可以启动一个web服务了,但是程序停留在命令行,如果ctrl+C程序也会终止了 命令行参数 如果想要后台启动,那么得让start命令知道是要后台运行的,参照docker命令行的方式就是加上-d,给一个命令添加参数的判断只需很少的代码 改造一下代码 var daemon bool
if daemon {
fmt.Println("gonne start",daemon)
}
命令行输入 gonne start -d 这样就可以接收到-d参数了,这里要说明一下,第一个参数取值,第二个参数代码--deamon,第三个参数代表-d
,第四个参数代码不加-d时候的默认值,第五参数是描述
后台运行 后台运行其实这里使用的是一个巧妙的方法,就是使用系统的command命令行启动自己的命令行输入,是不是有点绕,再看看看改造后的代码 Run: func(cmd *cobra.Command,serif; Font-size:12px; line-height:1.8em"> if daemon {
command := exec.Command("gonne","start")
command.Start()
fmt.Printf("gonne start,[PID] %d running...\n",command.Process.PID)
IoUtil.Writefile("gonne.lock",[]byte(fmt.Sprintf("%d",command.Process.PID)),0666)
daemon = false
os.Exit(0)
} else {
fmt.Println("gonne start")
}
starthttp()
}, 用exec的Command启动刚输入的gonne start -d,就会拦截到这条请求然后通过gonne start,但是程序就不会停留在命令行了,然后发现http服务还在,还可以访问。 还有一点就是把pID输出到gonne.lock文件,给停止的程序调用 终止后台程序 有了之前的 *** 作后,停止就简单多了 RootCmd.AddCommand(stopCmd)
var stopCmd = &cobra.Command{
Use: "stop",serif; Font-size:12px; line-height:1.8em"> Short: "Stop Gonne",serif; Font-size:12px; line-height:1.8em"> strb,_ := IoUtil.Readfile("gonne.lock")
command := exec.Command("kill",string(strb))
println("gonne stop")
执行 gonne stop 即可终止之前启动的http服务 help命令 好了,关于命令的 *** 作讲完了,再看看cobra给的福利,自动生成的help命令 这个不需要你做什么 *** 作,只需要输入gonne help,相关信息已经帮你生产好了。 appletekiMacBook-Pro:andev apple$ gonne help
Usage:
gonne [flags]
gonne [command]
Available Commands:
help Help about any command
start Start Gonne
stop Stop Gonne
version Print the version number of Gonne
Flags:
-h,--help help for gonne
Use "gonne [command] --help" for more information about a command. 当然,子命令也有 appletekiMacBook-Pro:andev apple$ gonne start -h
Start Gonne
gonne start [flags]
-d,--deamon is daemon?
复制代码 总结

以上是内存溢出为你收集整理的golang进阶(三)——后台进程的启动和停止全部内容,希望文章能够帮你解决golang进阶(三)——后台进程的启动和停止所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1273679.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存