496

パテSSH経由でLinuxサーバーに接続します。次のようなバックグラウンドプロセスとして実行しようとしました:

$ node server.js &

ただし、2.5 時間後に端末が非アクティブになり、プロセスが終了します。端末が切断されていても、プロセスを維持できる方法はありますか?


編集 1

実際にやってみnohupたのですが、PuttyのSSH端末を閉じたり、インターネットのプラグを抜いたりするとすぐにサーバーのプロセスが止まってしまいます。

Putty で何かしなければならないことはありますか?


編集 2 (2012 年 2 月)

node.jsモジュール、foreverがあります。node.js サーバーをデーモン サービスとして実行します。

4

14 に答える 14

1143

nohup node server.js > /dev/null 2>&1 &

  1. nohup意味: stty が切断されても、このプロセスを終了しません。
  2. > /dev/null意味: stdout は /dev/null (出力を記録しないダミーデバイス) に移動します。
  3. 2>&1つまり、stderr も stdout に移動します (既に にリダイレクトされてい/dev/nullます)。エラーのログを保持するために、&1 をファイル パスに置き換えることができます。2>/tmp/myLog
  4. &最後に、このコマンドをバックグラウンド タスクとして実行することを意味します。
于 2012-08-08T01:48:56.053 に答える
527

簡単な解決策(プロセスに戻ることに興味がない場合は、プロセスを実行し続けたいだけです):

nohup node server.js &

jobsこれらのバックグラウンド プロセスのインデックス付きリストを表示するコマンドもあります。また、実行するkill %1kill %2、プロセスのインデックスである番号を使用して、バックグラウンド プロセスを強制終了できます。

強力なソリューション(プロセスがインタラクティブな場合、プロセスに再接続できます):

screen

その後、Ctrl+a+d を押してデタッチし、実行して再度アタッチできます。screen -r

screen の新しい代替手段である tmux も検討してください。

于 2011-01-25T17:55:03.147 に答える
140

ぜひ使ってみてくださいscreen。ただ行うよりも少し複雑ですが、nohup long_running &画面を理解すると、二度と戻ってこなくなります。

最初に screen セッションを開始します。

user@host:~$ screen

何でも実行してください:

wget http://mirror.yandex.ru/centos/4.6/isos/i386/CentOS-4.6-i386-binDVD.iso

ctrl+A を押してから d を押します。終わり。セッションはバックグラウンドで続行されます。

ですべてのセッションを一覧表示しscreen -ls、コマンドでいくつかに接続できますscreen -r 20673.pts-0.srv。ここで、0673.pts-0.srv はエントリ リストです。

于 2013-06-28T06:40:49.547 に答える
132

これは古い質問ですが、Google で上位にランクされています。スクリーンセッション内で node.js プロセスをフラグを使用して、&またはnohupフラグを使用して実行することは、すべて回避策であるため、投票数が最も多い回答はほとんど信じられません。

特に screen/tmux ソリューションは、実際にはアマチュアソリューションと見なす必要があります。Screen と Tmux は、プロセスを実行し続けるためのものではなく、端末セッションを多重化するためのものです。サーバーでスクリプトを実行していて、切断したい場合は問題ありません。しかし、node.js サーバーの場合、プロセスをターミナル セッションに接続したくありません。これは脆すぎる。物事を実行し続けるには、プロセスをデーモン化する必要があります!

それを行うための優れたツールがたくさんあります。

PM2 : http://pm2.keymetrics.io/

# basic usage
$ npm install pm2 -g
$ pm2 start server.js

# you can even define how many processes you want in cluster mode:
$ pm2 start server.js -i 4

# you can start various processes, with complex startup settings
# using an ecosystem.json file (with env variables, custom args, etc):
$ pm2 start ecosystem.json

PM2 を支持する大きな利点の 1 つは、システム起動スクリプトを生成して、再起動間でプロセスを持続させることができることです。

$ pm2 startup [platform]

どこにいるplatformことができますubuntu|centos|redhat|gentoo|systemd|darwin|amazon

forever.js : https://github.com/foreverjs/forever

# basic usage
$ npm install forever -g
$ forever start app.js

# you can run from a json configuration as well, for
# more complex environments or multi-apps
$ forever start development.json

初期化スクリプト:

私はこの主題の専門家ではなく、この回答には長すぎるため、init スクリプトの作成方法については詳しく説明しませんが、基本的には OS イベントによってトリガーされる単純なシェル スクリプトです。詳細については、こちらをご覧ください。

ドッカー

-dオプションを指定して Docker コンテナーでサーバーを実行するだけで、ほら、デーモン化された node.js サーバーが作成されます。

サンプルの Dockerfile を次に示します (node.js公式ガイドから)。

FROM node:argon

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install

# Bundle app source
COPY . /usr/src/app

EXPOSE 8080
CMD [ "npm", "start" ]

次に、イメージをビルドしてコンテナーを実行します。

$ docker build -t <your username>/node-web-app .
$ docker run -p 49160:8080 -d <your username>/node-web-app

これが誰かがこのページにたどり着くのに役立つことを願っています. 作業には常に適切なツールを使用してください。多くの頭痛と何時間も節約できます。

于 2016-03-18T18:02:19.140 に答える
25

仕事を放棄する別の解決策

$ nohup node server.js &
[1] 1711
$ disown -h %1
于 2013-04-11T08:39:12.363 に答える
15

nohup端末が終了した後でもプログラムを続行できるようにします。実際にnohup、SSH セッションが正しく終了しない状況が発生したため、入力もリダイレクトする必要があります。

$ nohup node server.js </dev/null &

の設定方法によってnohupは、標準出力と標準エラーをファイルにリダイレクトする必要がある場合もあります。

于 2011-01-25T17:56:29.987 に答える
8

Nohup と screen は、バックグラウンドで Node.js を実行するための優れた軽量ソリューションを提供します。Node.js プロセス マネージャー ( PM2 ) は、デプロイ用の便利なツールです。npm を使用してシステムにグローバルにインストールします。

npm install pm2 -g

Node.js アプリをデーモンとして実行するには:

pm2 start app.js

必要に応じて、Unitechによって作成された監視 SAAS であるKeymetrics.ioにリンクできます。

于 2015-09-21T18:44:43.333 に答える
7
$ disown node server.js &

アクティブなタスク リストからコマンドを削除し、コマンドをバックグラウンドに送信します。

于 2014-07-30T17:09:01.870 に答える
5

nohupコマンドについて読んだことがありますか?

于 2011-01-25T17:54:55.493 に答える