supervisorgo


supervisordの軽量ローカル起動版が欲しかったので作ってみた。 dockerコンテナ内などで複数プロセスを一括起動したいときに役立つかも。

特徴

  • マルチプラットフォーム対応(Win/Lin/Mac)
  • サービスとしてインストール可能。
  • 複数のプロセスの管理が可能。
  • ダウンしたらリトライ回数分再起動を試みる。
  • リモートユーティリティで状況監視、プロセスのスタートストップが可能。

GitHub

https://github.com/nobonobo/supervisorgo

インストール

go get -u github.com/supervisorgo/cmd/...

設定ファイル

「supervisorgoの親フォルダ」/supervisorgo.json

{
	"ControlUri": "unix:./supervisorgo.sock",
	"Procs": [
		{
			"Name": "builder",
			"DisplayName": "Go Builder",
			"Description": "Run the Go Builder",

			"Dir": "/tmp",
			"Exec": "bash",
			"Args": ["-c","while true; do echo hello; sleep 5; exit 1; done"],
			"Env": [
			],

			"Stderr": "sample-err.log",
			"Stdout": "sample-out.log",
			"Interval": 1000,
			"Retry": 3
		}
	]
}

使い方

デバッグ用フォアグラウンド実行

-c で設定ファイル指定(省略時は「supervisorgoの親フォルダ」/supervisorgo.json)

supervisorgo -c config.json

supervisorgo daemon control

supervisorgo start
supervisorgo stop
supervisorgo restart
sudo supervisorgo install   # daemon install to system
sudo supervisorgo uninstall # daemon uninstall from system

usage for supervisorgoctl

supervisorctl [-c unix:./supervisorgo.sock] subcommand [args…]

supervisorctl status
(list procs)
supervisorctl status target-name
supervisorctl start target-name
supervisorctl stop target-name

TODO

  • 自動復旧とか無い
  • ターゲットの正常終了と異常終了でリトライするかどうか振り分けが要りそう。
  • 各プラットフォームでの使い心地を確認。

結果

まだまだ荒い作りなのでも少し使い込んでみます。 よければ試してみてね!