supervisor golangデーモンの実行


最近ではgolangガードプロセスの実現を煽っていて、supervisorという面白いものを何気なく見つけました.supervisorはunixのシステムプロセス管理ソフトウェアで、apache、nginxなどのサービスを管理することができ、サービスが切れたら自動的に再起動することができます.もちろんgolangのデーモンプロセスを実装するためにも使用できますが、以下に具体的な実装について説明します.
supervisorのインストール
centos 6.4に基づく.
supervisorはpythonで作成され、easy_インストールします.centosにはpythonの実行環境がデフォルトであり、インストールは非常に簡単です.
$ sudo yum install python-setuptools
$ sudo easy_install supervisor

エラーが表示されなければ、インストールに成功し、echoを使用できます.supervisord_confは構成の詳細を表示し、プロファイルを生成します.
$ sudo echo_supervisord_conf > /etc/supervisord.conf

golang httpサービス
まず簡単なgolang httpサービスを整えます
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package main
  import (      "fmt"      "log"      "net/http" )
  func main() {      http.HandleFunc( "/" func (w http.ResponseWriter, r *http.Request) {          fmt.Fprintf(w,  "Hello world" )      })
       err := http.ListenAndServe( ":9090" , nil)      if err != nil {          log.Fatal( "ListenAndServe: " , err)      } }
このプログラムを直接実行すると端末が占有され、supervisorでこのプログラムを走る方法を見てみましょう.
supervisor構成golang
編集/etc/supervisord.conf、最後に実行プログラム設定を追加
[program:golang-http-server]
command=/home/golang/simple_http_server
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/var/log/simple_http_server.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/var/log/simple_http_server.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB

いくつかの構成の説明:
command:実行するコマンドを表し、完全なパスを記入すればいいです.Autostart:supervisorとともに起動するかどうかを示します.Autorestart:プログラムが停止した場合、再起動しますか.stdout_logfile:ターミナル標準出力リダイレクトファイル.stderr_logfile:ターミナルエラー出力リダイレクトファイル.
その他の構成説明は、公式ドキュメントを表示できます.
supervisorの起動
$ sudo /usr/bin/supervisord -c /etc/supervisord.conf

何か問題が発生した場合は、ログを表示して分析できます.ログファイルパス/tmp/supervisord.log
tips:コンフィギュレーションファイルを変更した場合、kill-HCPでコンフィギュレーションファイルを再ロードできます
$ cat /tmp/supervisord.pid | xargs sudo kill -HUP

supervisorの実行ステータスの表示
$ supervisorctl
golang-http-server RUNNING pid 23307, uptime 0:02:55
supervisor>

ヘルプを表示するにはhelpを入力します
supervisor> help
default commands (type help ):
=====================================
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version

supervisor運転原理
supervisor実行後自体がデーモンプロセスであり,自身で対応するサブプロセスを管理することで,対応するプロセス状態を観察することで明らかになった.
$ ps -ef | grep supervisord
root 23306 1 0 07:30 ? 00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 23331 23222 0 07:41 pts/0 00:00:00 grep supervisord

$ ps -ef | grep simple_http_server
root 23307 23306 0 07:30 ? 00:00:00 /home/golang/simple_http_server
root 23333 23222 0 07:41 pts/0 00:00:00 grep simple_http_server

golang simpleを直感的に見ることができますhttp_serverプロセスはsupervisordのサブプロセスです.
supervisorは頼りになるかどうか
supervisorの誕生から10年、現在は3+バージョンなので安心して使いましょう.
リファレンス
supervisor公式サイト:http://supervisord.org/
デーモンプロセスがpythonでプレイされていたときに実装された原理については、linuxの下でpythonデーモンプロセスの作成と原理理解を参照してください.
もしこの文章があなたを助けたら、作者に賞をあげることができますよ.