goremanを拡張してみた
Posted on Wed, 28 Jun 2017 00:51:24 +0900
foreman クローンであるところの goreman 便利ですよね。 よく使っています。
若干バッドノウハウな気もしますが、 コマンドの起動順序を制御したり、少し遅らせてコマンドを実行したい時があります。 以前は起動コマンドに sleep を挟んだりして対応していたのですが、 最近の変更(#41)で exec 経由でコマンドを実行するようになったため、 このワザが使えなくなってしまいました。
web1: sleep 2.5; go run web.go web2: sleep 3.5; go run web.go
拡張する
起動順と起動までの時間を制御するためにforkして独自拡張を追加してみました。
https://github.com/hhatto/goreman
Procfileの記法は プロセス名: 実行コマンド のような形で作成するのですが、 プロセス名 と : の間に () 内に設定を記載できるようにしました。
具体的には以下の様な感じです。
web1: plackup --port $PORT web2: plackup --port $PORT web3: bundle exec ruby web.rb web4: go run web.go -a :$PORT
web1: plackup --port $PORT web2(delay=1000): plackup --port $PORT web3(priority=2): bundle exec ruby web.rb web4(delay=2500,priority=-2): go run web.go -a :$PORT
インストールして使う。
$ go get -u github.com/hhatto/goreman $ goreman start
今の所便利に使えています。 もちろんオリジナルのProcfile記法でもそのまま動きます。
[2017.07.14追記]
プロセスを終了する際のシグナルをしていできるようにしました。 goremanはデフォルトで SIGHUP でプロセス終了させるのですが、 redis-server が SIGHUP を無視しているので、他のシグナルで終了させたいなと。 sig=XXX のように指定できます。