2021年1月時点Next.jsのGraceful Shutdown実装状況調査

概要

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月当時の)調査内容

  1. GitHubでSIGTERMを検索
  2. 該当コードを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