Help us understand the problem. What is going on with this article?

GolangのWebAPIをsupervisorでデーモン化して公開する。

GolangのWebAPIをデーモン化して公開する際に役立った情報の備忘録です。

使用環境

Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type (無料使用枠)

デーモン化とは

そもそもGolangのWebAPIを公開する方法を知らず、Linux上で"GO RUN main.go"を実行すればよいのかと考えていた。この方法だと、RLoginなどで接続を閉じたタイミングで処理も終了してしまって上手く行かなかった。

調べるうちに、デーモン(UNIX系OSにおいて、常時待機しているプログラムを指す)というものに行きついた。[Golang デーモン]で検索すると多数ヒットしたので、Golangのmain.goを常駐化させる方針を立てた。

supervisor

Golangのバイナリを常駐化させる為のツール。
Nginx同様にconfファイルで設定を行う必要がある。

supervisor.confの編集

sudo vi /etc/supervisord.conf

supervisor.confの中身

設定項目は複数あるが、基本的に[program:XX]の設定のみで動くはず。

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

hogeフォルダにバイナリ化したgoプログラムを配置した場合の例。
編集したら、下記の手順で再起動を行えば反映される。

supervisord.confを変更した場合の再読み込み手順

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl restart XX

プログラム内で環境変数を利用している場合の注意

筆者の環境だと、supervisorでデーモン化したプログラムから、環境変数がうまく読み込まれなかった。

デーモンが起動しているプロセス上の環境変数を確認する方法としては以下の通り。
①デーモンが起動しているプロセスを確認

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などのファイルに直接書き込む方法
OR
supervisord.confに書き込む方法
の2通り存在する。

①~/.bashrcなどに直接書き込み

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

②supervisord.confに書き込む方法
[program:XX]のenvironmentにカンマ区切りで環境変数をセットする。

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

supervisord.confを変更した場合の再読み込み手順を実行すれば、環境変数が反映されるはず。

kyamasan
手を動かしていて詰まった箇所を備忘録として残しておきます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした