とーますメモ

Ruby on Rails / Goなどの学習メモ

【Go】Goアプリをデーモン化(常駐化)させてみた。

Supervisorという「プロセス管理/デーモン化」ツールが便利そう。
色んなサイトで紹介されていたので、使用してみる。

インストール

$ sudo yum install supervisor

設定ファイル編集

$vi /etc/supervisord.conf

一番下にGoアプリの設定を以下のように追記。
アプリ名:sample
アプリのディレクトリ:/home/xxxxx/go_deploy/
アプリ実行ファイル名:app
ユーザ名:YYYYY

[program:sample]
command=/home/xxxxx/go_deploy/app
autostart=true
autorestart=true
stopsignal=TERM
stdout_logfile=/var/log/supervisor/%(program_name).stdout.log
stderr_logfile=/var/log/supervisor/%(program_name).stderr.log
user=YYYYY

起動

$ sudo service supervisord start

autostartがtrueになっているので、自動でスタート。
細かいプロセス管理は以下の「supervisorctl」コマンドを使用する。
www.task-notes.com

動作中の全プロセス確認

$ sudo supervisorctl status

指定したアプリのみ起動

$ sudo supervisorctl start sample

指定したアプリのステータス確認

$ sudo supervisorctl status sample

指定したアプリのみ停止

$ sudo supervisorctl stop sample

ログファイルの場所

/var/log/supervisor/supervisord.log

注意:テンプレートなどをGo内で使用している場合は(つまり一つのバイナリファイル内にすべてのデータが無い場合)
go-bindataなどを使用して、テンプレートやアセット系のファイルを一つのバイナリにしてあげないとsupervisorでは動作しないっぽい。。
(自分はできなかったが、他に方法をご存じの方がいれば、ご指摘いただけるとありがたいです)

[参考]
SupervisorでGolangで書かれたアプリケーションのデーモン化をした話 - こんちゃんブログ
Supervisorで簡単にデーモン化 - Qiita
適当なスクリプトをデーモン化するのにSupervisorが便利 - id:anatooのブログ