概要
Next.jsをコンテナで動かすときにGraceful Shutdownが実装されているか気になった。
12月の調査時点ではcanaryだったが、すでにリリースされていた。
本当は「2020年12月時点Next.jsのGraceful Shutdown実装状況調査」だったが、
今の状況だと「Next.jsにGraceful Shutdownが導入されたので挙動を確認する」とかでいい気がする。
ブログはすぐに書きましょう。
結果
下記リリースで導入された。
https://github.com/vercel/next.js/releases/tag/v10.0.4
Graceful Shutdown
コンテナの世界では外部からコンテナが落とされる事がよくある。
つまりdocker stop/killがよく実行される。
そのときアプリケーションにはSIGTERMやSIGKILLが送信される。
これらのシグナルを検知し、リソース(DBコネクション、FileIOなど)を開放して正常終了(exit code0)する必要がある。
c.f. https://www.ctl.io/developers/blog/post/gracefully-stopping-docker-containers/
(12月当時の)調査内容
- GitHubでSIGTERMを検索
- 該当コードをBLAMEしてコミットログ、PRを読む
https://github.com/vercel/next.js/pull/19433
動作確認
v10.0.4
$./node_modules/.bin/next start ready - started server on http://localhost:3000 # kill -15 <PID> $echo $? 0
v10.0.3
$./node_modules/.bin/next start ready - started server on http://localhost:3000 # kill -15 <PID> Terminated: 15 $echo $? 143