Node.jsで作成したアプリ(サーバー)を本番環境のLinux(CentOS7)に移行し、ターミナル上で下記のコマンドで起動した。

node start.js

サーバーが立ち上がり、本番環境のURLにアクセスすると想定どおりページが表示される。

動作に問題が無いことを確認し、ターミナルを終了。

すると、立ち上げたはずのサーバーまで終了してしまい、本番環境のページが表示されなくなっていた。

今回はこの問題を解決する方法を紹介しよう。

nohupコマンドでアプリを常駐化させる

結論から言う。

nohup node start.js &

ターミナルでアプリを起動する時に上記コマンドを実行する。

これで指定したアプリを常駐化することができ、ターミナルを終了してもアプリは実行され続けるのだ。

nohupとは

Linuxに用意されているコマンドで、先述のとおりSSH接続端末(ターミナルなど)からログアウトしても、実行したコマンドで起動したプロセスを常駐化させる。

nohupで常駐化させたアプリを終了させる

逆にアプリを終了させる場合は以下の手順をとる。

まず、下記のコマンドで実行中のプロセスIDを確認する。
start.jsのところは実行ファイルによるものなので、適宜変更が必要だ。

ps -fu root | grep start.js

プロセスIDは以下のように表示される。
この場合、22718が該当のIDだ。

root     22718 18552  0 12:35 pts/0    00:00:00 node start.js

IDを確認したらkillコマンドでプロセスを終了する。
※IDは環境によって違うので注意!

kill 22718

これでnohupで起動したプロセスを終了することができる。

nohup.out

なお、nohupでアプリを起動すると、自動的にnohup.outというファイルが作られる。

このファイルには実行中のアプリの標準出力、エラー出力が記録される。