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というファイルが作られる。
このファイルには実行中のアプリの標準出力、エラー出力が記録される。