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のブログ