supervisor golangデーモンの実行
3962 ワード
最近ではgolangガードプロセスの実現を煽っていて、supervisorという面白いものを何気なく見つけました.supervisorはunixのシステムプロセス管理ソフトウェアで、apache、nginxなどのサービスを管理することができ、サービスが切れたら自動的に再起動することができます.もちろんgolangのデーモンプロセスを実装するためにも使用できますが、以下に具体的な実装について説明します.
supervisorのインストール
centos 6.4に基づく.
supervisorはpythonで作成され、easy_インストールします.centosにはpythonの実行環境がデフォルトであり、インストールは非常に簡単です.
エラーが表示されなければ、インストールに成功し、echoを使用できます.supervisord_confは構成の詳細を表示し、プロファイルを生成します.
golang httpサービス
まず簡単なgolang httpサービスを整えます
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
このプログラムを直接実行すると端末が占有され、supervisorでこのプログラムを走る方法を見てみましょう.
supervisor構成golang
編集/etc/supervisord.conf、最後に実行プログラム設定を追加
いくつかの構成の説明:
command:実行するコマンドを表し、完全なパスを記入すればいいです.Autostart:supervisorとともに起動するかどうかを示します.Autorestart:プログラムが停止した場合、再起動しますか.stdout_logfile:ターミナル標準出力リダイレクトファイル.stderr_logfile:ターミナルエラー出力リダイレクトファイル.
その他の構成説明は、公式ドキュメントを表示できます.
supervisorの起動
何か問題が発生した場合は、ログを表示して分析できます.ログファイルパス/tmp/supervisord.log
tips:コンフィギュレーションファイルを変更した場合、kill-HCPでコンフィギュレーションファイルを再ロードできます
supervisorの実行ステータスの表示
ヘルプを表示するにはhelpを入力します
supervisor運転原理
supervisor実行後自体がデーモンプロセスであり,自身で対応するサブプロセスを管理することで,対応するプロセス状態を観察することで明らかになった.
golang simpleを直感的に見ることができますhttp_serverプロセスはsupervisordのサブプロセスです.
supervisorは頼りになるかどうか
supervisorの誕生から10年、現在は3+バージョンなので安心して使いましょう.
リファレンス
supervisor公式サイト:http://supervisord.org/
デーモンプロセスがpythonでプレイされていたときに実装された原理については、linuxの下でpythonデーモンプロセスの作成と原理理解を参照してください.
もしこの文章があなたを助けたら、作者に賞をあげることができますよ.
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デーモンプロセスの作成と原理理解を参照してください.
もしこの文章があなたを助けたら、作者に賞をあげることができますよ.