Goアプリケーションをsupervisorでdaemonとして起動する
起動したGoのアプリケーションをdaemonプロセスとして動かす。なお、Centos6.7
を使用している。
Supervisor: A Process Control System — Supervisor 3.3.3 documentation
Install
$ wget https://bootstrap.pypa.io/ez_setup.py -O - | python $ easy_install supervisor $ supervisord -v 3.3.3
yum
でインストールすると古いバージョン(2.x.x系)がインストールされる。古いバージョンだとsupervisorctl
コマンドでstart
やstop
を実行した時にコマンドが返ってこないので注意
Configuration
設定ファイル(/etc/supervisord.conf
)を作成する
設定は以下を参考にした。設定例は補足に記載。
SupervisorでGolangで書かれたアプリケーションのデーモン化をした話 - こんちゃんブログ
詳細は以下を参照
http://supervisord.org/configuration.html
How to use
各コマンドの詳細は以下を参照
http://supervisord.org/running.html
日本語だとこちらが詳しい
supervisorctlについて調べてみた - Masteries
supervisord
supervisorを起動するためのコマンド。以下のコマンドでsupervisorを起動する。なお、設定ファイルでautostart=true
と設定しているので、sueprvisordを起動するとGoアプリケーションも自動で立ち上がっている。
$ supervisord -c /etc/supervisord.conf
supervisorctl
supervisorでdaemonとして動かしたいアプリケーションの起動・停止するための主なコマンド
supervisorctl start <name>
supervisorctl stop <name>
supervisorctl restart <name>
- supervisorの設定ファイルを再読込せずにアプリを再起動
supervisorctl update
- supervisorの設定ファイルを再読込してアプリを再起動
supervisorctl status
$ supervisorctl start goapp goapp: started $ supervisorctl status goapp RUNNING pid 2675, uptime 0:00:02 $ supervisorctl stop goapp goapp: stopped $ supervisorctl status goapp STOPPED Dec 15 08:12 AM $ supervisorctl restart goapp goapp: stopped goapp: started $ ps aux | grep goapp root 2681 0.0 0.2 46592 5416 ? Sl 08:14 0:00 /go/bin/goapp
個人の感想
公式のドキュメントがしっかりしてて助かる
補足
設定ファイルの例
[unix_http_server] file = /var/tmp/supervisor.sock chmod = 0777 chown= root:root [supervisord] http_port=/var/tmp/supervisor.sock ; (default is to run a UNIX domain socket server) logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log) logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB) logfile_backups=10 ; (num of main logfile rotation backups;default 10) loglevel=info ; (logging level;default info; others: debug,warn) pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) nodaemon=false ; (start in foreground if true;default false) minfds=1024 ; (min. avail startup file descriptors;default 1024) minprocs=200 ; (min. avail process descriptors;default 200) [supervisorctl] serverurl=unix:///var/tmp/supervisor.sock ; use a unix:// URL for a unix socket [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [program:goapp] command=/go/bin/goapp ; the program (relative uses PATH, can take args) autostart=true ; start at supervisord start (default: true) autorestart=true ; retstart at unexpected quit (default: true)