goremanを拡張してみた

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の記法は プロセス名: 実行コマンド のような形で作成するのですが、 プロセス名: の間に () 内に設定を記載できるようにしました。

具体的には以下の様な感じです。

オリジナルのProcfile

 web1: plackup --port $PORT
 web2: plackup --port $PORT
 web3: bundle exec ruby web.rb
 web4: go run web.go -a :$PORT

拡張後のProcfile

 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-serverSIGHUP を無視しているので、他のシグナルで終了させたいなと。 sig=XXX のように指定できます。