Tatsuhiko Miyagawa's Blog

Handling SIGQUIT to gracefully shutdown Starman

December 01, 2011

Link: Handling SIGQUIT to gracefully shutdown Starman

Implemented QUIT handler to gracefully shutdown Starman workers (and full graceful restart with Server::Starter) — one of the ugliest monkeypatch I’ve written in a few months.

HUPのリスタート処理がlinux環境で app.psgi 以外のファイルパスを使っていた場合にうまく動いていなかったのを直したのと同時に、Server::Starter対応の部分で、デフォルトでTERMを受け取ったらgraceful shutdownしないといけないのが、そこが実装されてなかったのに気づいた。というわけで、SIGQUITでgraceful shutdown するようにパッチを書いたので、start_server — signal-on-hup=QUIT — starman — preload-app … で graceful restart 可能になった。

しかし、Net::Server のシグナル処理は非常に拡張しづらいので、register_sig をlocalで上書きしてとかmonkey patchしまくり。かといって今更Net::Serverにパッチをあてるのもどうかという気もするし(2010年10月に0.99が出て以来更新されていない)