使用supervisord运行Golang程序时无法识别GOPATH
我有一个Golang程序实现了一个web服务器。预计它将持续运行,并在出现任何意外故障或崩溃时重新启动自身。为此,我尝试使用使用supervisord运行Golang程序时无法识别GOPATH,go,supervisord,Go,Supervisord,我有一个Golang程序实现了一个web服务器。预计它将持续运行,并在出现任何意外故障或崩溃时重新启动自身。为此,我尝试使用supervisords将其配置为UNIX进程。但是,我面临的问题是,代码中包含的外部go库没有被识别为supervisorORD无法识别GOPATH。这会导致以下错误: web_server.go:11:2: cannot find package "github.com/gorilla/mux" in any of: /usr/lib/go/src/github
supervisords
将其配置为UNIX进程。但是,我面临的问题是,代码中包含的外部go库没有被识别为supervisorORD
无法识别GOPATH
。这会导致以下错误:
web_server.go:11:2: cannot find package "github.com/gorilla/mux" in any of:
/usr/lib/go/src/github.com/gorilla/mux (from $GOROOT)
($GOPATH not set)
使用supervisord运行web服务器时。我的web服务器的supervisord配置为:
[program:web_server]
command=go run web_server.go
directory=/home/ubuntu
autostart=true
autorestart=true
startretries=5
stderr_logfile=/home/ubuntu/err_logs/web_server.err.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
解决方法是什么?如前所述,
supervisord
的一个重要特性是:
子进程将继承用于启动的shell的环境
supervisord
程序。几个环境变量将由
在孩子的环境中监督自己,包括
SUPERVISOR\u已启用
(指示流程处于SUPERVISOR状态的标志
控制),SUPERVISOR\u PROCESS\u NAME
(流程指定的配置文件
此流程的名称)和主管\u组\u名称
配置文件(为子进程指定了进程组名称)
这些环境变量可以在[supervisord]中重写
名为环境的节配置选项(适用于所有子流程)
或者在per-[program:x]
节环境配置选项中
(仅适用于[程序:x]
第节)
因此,在环境
变量中添加GOPATH
解决了这个问题
[program:web_server]
command=go run web_server.go
directory=/home/ubuntu
autostart=true
autorestart=true
startretries=5
stderr_logfile=/home/ubuntu/err_logs/web_server.err.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
environment=GOPATH="/home/ubuntu"
如前所述,supervisord
的一个重要属性是:
子进程将继承用于启动的shell的环境
supervisord
程序。几个环境变量将由
在孩子的环境中监督自己,包括
SUPERVISOR\u已启用
(指示流程处于SUPERVISOR状态的标志
控制),SUPERVISOR\u PROCESS\u NAME
(流程指定的配置文件
此流程的名称)和主管\u组\u名称
配置文件(为子进程指定了进程组名称)
这些环境变量可以在[supervisord]中重写
名为环境的节配置选项(适用于所有子流程)
或者在per-[program:x]
节环境配置选项中
(仅适用于[程序:x]
第节)
因此,在环境
变量中添加GOPATH
解决了这个问题
[program:web_server]
command=go run web_server.go
directory=/home/ubuntu
autostart=true
autorestart=true
startretries=5
stderr_logfile=/home/ubuntu/err_logs/web_server.err.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
environment=GOPATH="/home/ubuntu"
你不应该使用go run
。使用go build
构建一个静态二进制文件,然后通过supervisord运行它。您的程序不会在每次重新启动时重新编译(这就是“go run”所做的),也不需要每次都提供其依赖项。Go程序被设计成独立的二进制文件。哦,是的。我错过了。非常感谢。如何运行go-build和运行二进制文件?您不应该使用go-run
。使用go build
构建一个静态二进制文件,然后通过supervisord运行它。您的程序不会在每次重新启动时重新编译(这就是“go run”所做的),也不需要每次都提供其依赖项。Go程序被设计成独立的二进制文件。哦,是的。我错过了。非常感谢。如何运行go构建和运行二进制文件?