web-dev-qa-db-ja.com

ログアウト時に終了することなく、NodeJSアプリをバックグラウンドでどのように実行しますか?

私はubuntuサーバーでアプリケーションを実行したままにしているので、Googleはpingを実行できますが、ログアウトするとアプリがシャットダウンし続けます。

Nodeshellアプリをsupervisorで起動して、変更を監視します(シェルスクリプトを使用)

Nohupのようなコマンドを見つけましたが、service httpd startのような単純なコマンドを入力する以外のバックグラウンドサービスの実行に関しては、CentOSのApacheでうまく機能するようです。

サービスを実行するために別のユーザーを作成する必要がありますか? Ubuntu 10.04のLinodeインスタンスがあります

run.sh

cd myapp/src/main/node
supervisor -w "myapp/src/main/node,myapp2/src/main/node,./" run-apps.js
3
qodeninja

これを試して:

Nohup supervisor -w "myapp/src/main/node,myapp2/src/main/node,./" run-apps.js &

他のいくつかの方法:

5
quanta

終了する理由は、ログアウトして親シェルを終了すると、スクリプトがHUPシグナルを受信し、STDOUTおよびSTDERRへの書き込み機能を失うためです。

4つのオプションがあります(「正確さ」と「クリーンさ」の順に)。

  1. HUPシグナルを無視し、ファイルにきれいにログを記録するように変更します。
  2. screenセッションでスクリプトを実行する
  3. Nohupを使用してスクリプトを実行します
  4. スクリプトを起動してスクリプトをdisownsし、関連するSTDOUTチャネルとSTDERRチャネルを閉じる、かなり複雑なbashスクリプトを作成します。
5
Kyle

Nohupなしでこれを行う別の方法を次に示します。

例えば。:

$ jobs
$ sleep 300 &
[1] 79844
$ jobs
[1]  + running    sleep 300
$ disown %1
$ jobs
$ pgrep sleep
79844

説明:

  1. jobsを使用してバックグラウンドジョブを表示します。
  2. 背景sleep 300
  3. 再度jobsを使用してください。 sleepのPIDは79844で、ジョブ#1です。
  4. 却下されたジョブ#1
  5. 再度jobsを使用してください。バックグラウンドジョブはありません。
  6. pgrepを使用して、sleepという名前のプロセスを検索します。 1つあり、PID 79844(同じPID)があります。

取り消されたジョブに影響を与えずに、ターミナルを閉じたりログアウトしたりできます。

これには、Nohup.outファイルを残さないという利点がありますが、STDOUTに書き込まれたものもすべて失われます。

1
bahamat