node.jsの自動再起動

先日、WebSocket通信 で使用している node.js が停止してしまい、「ブラウザでワンナイト人狼」ゲームが動かなくなっていました。ご迷惑をお掛けしました。

【関連記事】 node.js 止まってたわ(´・ω・`)

原因は解らなかったのですが、node.js をあまり長い間動かすとメモリリーク等で固まるのかもしれません。そこで、定期的に node.js を自動で再起動させることにしました。

こんな数行のシェルを組んでみました。

[bash]
#!/bin/sh

pid=`ps -elf | grep “app.js” | grep -v grep | awk ‘{print $4}’`
if [ “${pid}” != “” ]; then
kill ${pid}
echo “kill ${pid}”
fi
sleep 2
nohup /XXXXXX/node /XXXXXX/app.js > /dev/null &
[/bash]

このシェルを実行すると、今動いている node.js を kill して、新しい node.js を2秒後に起動します。後はこのシェルを自動実行するべく、cron設定を行いました。

[text]
# Node.js 定期リスタート処理
0 6 1 * * /XXXXXX/restartNodeJs.sh >/dev/null 2>&1
[/text]

これで、毎月1日 早朝6時に node.js が再起動するはずです。
標準エラー出力(STDERR) を /dev/null に流しているので、シェルの実行に失敗した時に気が付かないというツッコミがあると思いますが、このcron処理とは別に定期的なサービス監視が動いているので、node.jsが立ち上がらなかった場合はそちらで障害検知します。

さて、最初の自動再起動は 2013年8月1日 早朝6時ですね。
うまくいきますように!( ・`ω・´)/

[2013.09.13 追記]
現在は週に一回、月曜日の早朝 6:00 に再起動するようにしています。

[2016.02.23 追記]
現在は毎日一回、早朝 6:00 に再起動するようにしています。