1. ホーム
  2. node.js

[解決済み】node.jsアプリケーションを永続的に動作させる方法は?

2022-04-18 21:02:23

質問

Debianサーバーに、Node.jsをインストールしました。このコマンドラインでputtyからアプリを起動する方法は理解しています。

node /srv/www/MyUserAccount/server/server.js

で、アドレスに辿り着く 50.51.52.53:8080 (IPとポート)を指定します。

しかし、putty を閉じるとすぐに、そのアドレスに到達することができません。 50.51.52.53:8080 もう

Node.jsアプリケーションを永続的に動作させる方法とは?

ご推察の通り、私はLinuxとNode.jsの初心者です。

どのように解決するのですか?

他の回答はOPの問題を解決するものですが、どれもやりすぎで、なぜこの問題が発生しているのかを説明していません。

鍵はこの行、 "I close putty, then I cannot reach the address".です。

Putty でリモートホストにログインすると、SSH linux プロセスが開始され、その SSH セッションから入力されたすべてのコマンドは、そのプロセスの子プロセスとして実行されます。

あなたの問題は、Puttyを閉じるときにSSHセッションを終了させ、そのプロセスとアクティブな子プロセスを停止させることです。 Putty を終了するときに、不注意にもサーバーを終了させてしまうことです。 フォアグラウンド . この動作を回避するには、サーバーを 背景 のように、コマンドに & を追加してください。

node /srv/www/MyUserAccount/server/server.js &

この問題は、Linuxの知識不足であり、nodeに関する質問ではありません。 より詳しい情報はこちらをご覧ください。 http://linuxconfig.org/understanding-foreground-and-background-linux-processes

UPDATE

他の方がおっしゃっているように、ターミナルを終了するときにノードサーバがまだ死んでしまうことがあります。 私が遭遇した共通の問題は、ノードプロセスがbgで実行されているにもかかわらず、その標準出力と標準エラーはまだターミナルを指していることです。 つまり、ノードサーバが console.log や console.error に書き込むと、パイプが壊れたというエラーを受け取り、クラッシュします。 これはプロセスの出力をパイプすることで回避することができます。

node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &

問題が解決しない場合は、次のようなことを調べてみてください。 tmux または ノーアップ は、あらゆる種類のプロセス(データベース、ロギングサービス、他の言語)を実行するために使用できるため、ノード固有のソリューションよりもまだ堅牢です。

サーバーが終了してしまう原因としてよくある間違いは、サーバーを起動した後に nohup node your_path/server.js & をクリックするだけで、Putty 端末を閉じてしまいます。この場合 exit コマンドを実行すると、nodeサーバーが起動します。