使用Supervisor将Golang的WebAPI转为守护进程并进行发布

以下是Golang的Web API进行守护进程化并公开时的有用信息备忘录。

运用环境

亚马逊 Linux AMI 2018.03.0 是一种提供免费使用枠的云服务器系统,支持HVM虚拟化技术和SSD硬盘。

具体化为 Chinese:

妖魔化是指

本来,我并不知道如何发布Golang的WebAPI,一开始我的想法是在Linux上运行“GO RUN main.go”。但是,通过这种方式,在关闭RLogin等连接时,处理也会随之终止,无法成功运行。

在调查的过程中,我发现了一个叫做”守护进程”的东西(在UNIX系列操作系统中指的是一种常驻的程序)。当我搜索”Golang守护进程”时,有很多相关结果,所以我决定将Golang的main.go程序设为常驻状态。

主管

用于将Golang二进制文件设为常驻的工具。
需要像Nginx一样使用conf文件来进行配置。

编辑supervisor.conf文件。

sudo vi /etc/supervisord.conf

主管配置文件的内容

尽管存在多个配置项,但是基本上应该只需要[程序:XX]的配置来运行。

[program:XX]
command=/home/ec2-user/hoge/main

如果将经过二进制化的Go程序放置在hoge文件夹中,下面是编辑后通过以下步骤重新启动可以应用更改的示例。

如果更改了supervisord.conf文件,需要执行以下步骤来重新加载:

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl restart XX

在程序中使用环境变量时需要注意。

在我的环境中,由supervisor守护程序化的程序无法正确读取环境变量。

以下是確認正在運行中的守護程序進程上的環境變量的方法:
1. 確認守護程序是否已經啟動的進程。

ps ax | grep main
20591 ?        Sl     0:00 /home/ec2-user/hoge/main
20632 pts/1    S+     0:00 grep --color=auto main

确认在20591进程中的环境变量。

sudo strings /proc/20591/environ

如果未能出现,请添加到环境变量中。

添加环境变量的方法

有两种方法可以直接将其写入.bashrc等文件。 或者supervisord.conf文件中。

将以下内容直接写入~/.bashrc等文件中。

export DB_USER="sa"
export DB_Name="..."

在supervisord.conf文件中写入方法
在[program:XX]的环境变量中使用逗号分隔来设置环境变量。

[program:XX]
...
environment=DB_USER="sa",DB_Name="..."

执行更改supervisord.conf后重新加载步骤,应该能够反映环境变量。

广告
将在 10 秒后关闭
bannerAds