加筆修正しました
リクエストを落とさずにnginxをアップグレードする方法とその検証 | cloudrop によると nginxはSIGWINCH(と他のシグナル)をうまいこと使ってプロセスを世代交代することができるんですね
フォアグラウンドで動作させる際は気をつけよう
一番最初に書いた内容
$ sudo /usr/local/sbin/nginx -g 'daemon off;' -c /etc/nginx.conf
上記の様にnginxをデーモン化しないで起動してリバースプロキシとして動かして遊んでいたら、ふとしたタイミングでnginxが止まる。
その際に下記のようなログを出していた
2011/06/27 21:22:37 [notice] 17812#0: signal 28 (SIGWINCH) received, stop accepting connections 2011/06/27 21:22:37 [notice] 17813#0: signal 28 (SIGWINCH) received, shutting down 2011/06/27 21:22:37 [notice] 17813#0: gracefully shutting down 2011/06/27 21:22:37 [notice] 17813#0: exiting 2011/06/27 21:22:37 [alert] 17813#0: aborting 2011/06/27 21:22:37 [notice] 17813#0: exit 2011/06/27 21:22:37 [notice] 17812#0: signal 20 (SIGCHLD) received 2011/06/27 21:22:37 [notice] 17812#0: worker process 17813 exited with code 0 2011/06/27 21:22:37 [notice] 17812#0: signal 23 (SIGIO) received
一体何がなんだかよく分からない
ググって解決
Ah, I figured it out what it is. SIGWINCH: signal is delivered to process when its terminal size changes.
screenやターミナルのウィンドウのサイズを変えると SIGWINCH てなシグナルが飛ぶんだそうで、それでnginxが墜落するようです。やってみたら確かに再現します。
これはシカトしちゃってくれた方がいい挙動な気が