英文:
Make golang program restart itself
问题
我正在编写一个工具,其中一个命令允许你启动一个新的会话。
你想知道如何使一个 Golang 程序重新启动自身?如果你的解决方案是基于操作系统的,我使用的是 Linux。
我尝试了以下代码:
// 导入 os/exec 包
exec.Command(os.Args[0]).Run()
但是它不起作用。我得到了一个空白的输入会话,很难解释。
我的程序输入:session new
:(
:(
每个 代表一个空行,我可以在其中输入内容并按回车键,这里有两个 :(,表示我按了两次回车键。
我期望的输出是:
我的程序输入:session new
我的程序输入:
编辑:更准确地说,我想创建一个相同程序的子进程。
英文:
Im writing a tool and one of its commands allows you to start a new session
How can I make a golang program restart itself? If your solution is OS-Strict im on Linux.
I tried
// exec from os/exec
exec.Command(os.Args[0]).Run()
but it doesnt work. I get a blank input session which is hard to explain
My Program Input: session new
:(
:(
each of the represent a blank line where im able to type stuff and hit enter, there are 2 which means i hit enter twice
Im expecting
My Program Input: session new
My Program Input:
Edit: more accurately, i want to make a subprocess of the same program
答案1
得分: 1
你可以使用一个独立的进程,比如radovskyb/gobeat
。
示例:
sudo gobeat -pid=1234 -cmd="go run sendemail.go"
- 使用
sudo
运行,这样gobeat
将在同一个终端tty
中重新启动服务器。(sudo
) - 将
gobeat
指向你想要监视的正在运行的服务器进程。(gobeat -pid=1234
) - 设置
cmd
标志以运行一个发送电子邮件通知服务器已重新启动的Go文件。(-cmd="go run sendemail.go"
)
如果你不想使用一个独立的进程,可以考虑实现优雅升级。
你可以使用库cloudflare/tableflip
。
英文:
You could use a separate process, like radovskyb/gobeat
.
Example:
> sudo gobeat -pid=1234 -cmd="go run sendemail.go"
>
> 1. Run with sudo
so gobeat
will restart the server in the same terminal tty
that it originated in. (sudo
)
> 2. Point gobeat
to the process of the running server that you want gobeat to monitor. (gobeat -pid=1234
)
> 3. Set the cmd
flag to run a Go file that will send an email notifying you that the server was restarted. (-cmd="go run sendemail.go"
)
If you do not want a separate process, then consider implementing a graceful upgrade
You can use the library cloudflare/tableflip
for instance.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论