使用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后重新加载步骤,应该能够反映环境变量。