goremanを拡張してみた
2017-06-28 - ⧖ 1.0 minforeman クローンであるところの 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 のように指定できます。