node.jsアプリをバックグラウンドサービスとして実行するにはどうすればよいですか?


503

この投稿は何年にもわたって多くの注目を集めてきたので、この投稿の下部にプラットフォームごとの上位ソリューションをリストしました。


元の投稿

node.jsサーバーをバックグラウンドで実行したいのです。つまり、ターミナルを閉じたときにサーバーを実行し続けたいです。私はこれをググってこのチュートリアルを思いつきましたが、意図したとおりに動作しません。そのため、そのデーモンスクリプトを使用する代わりに、出力リダイレクト(2>&1 >> file一部)を使用しただけだと思いましたが、これも終了しません。出力/エラーを待機しているように、ターミナルに空白行が表示されます。

また、プロセスをバックグラウンドで実行しようとしましたが、ターミナルを閉じるとすぐに、プロセスも強制終了されます。

では、ローカルコンピュータをシャットダウンするときに、どのように実行したままにできますか?


トップソリューション


3
私は彼が彼のローカルシステムをシャットダウンするためのものだと思う
カマル・レディ

46
彼は、sshセッションを閉じるとタスクが終了することを意味しました
thedjaney

5
github.com/Unitech/pm2は高度に維持され、非常に安定したプロセスマネージャーです。ぜひお試しください!
Unitech 2014

1
あなたは、画面(使用することができますaperiodic.net/screen/quick_reference
karantan

回答:


435

Node.jsアプリケーションを独自のプロセスとして実行するにどうすればよいですか。

2015年の回答:ほとんどすべてのLinuxディストリビューションにsystemdが付属しています。つまり、永久にmonit、PM2などは不要になりました。OSはすでにこれらのタスクを処理しています。

myapp.serviceファイルを作成します( 'myapp'をアプリの名前に置き換えます)。

[Unit]
Description=My app

[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
# Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
Group=nogroup
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp

[Install]
WantedBy=multi-user.target

Unixを 初めて使用する場合は、最初の行に記述して/var/www/myapp/app.jsください#!/usr/bin/env node

サービスファイルをにコピーします/etc/systemd/system

から始めましょうsystemctl start myapp

起動時に実行できるようにしますsystemctl enable myapp

でログを見る journalctl -u myapp

これは、Linux / 2018サーバーにノードアプリをデプロイする方法から引用したもので、Linux /ノードサーバー(.serviceファイルを含む)を構築するためのAWS / DigitalOcean / Azure CloudConfigを生成するコマンドも含まれています。


4
利用可能な場合、Upstartも優れたソリューションです。どちらの方法でも、nodejsデーモンを実行し続けるために、nodejsプロセスに依存しないでください。これは、OSのみのタスクです。killall nodejs and forever is gone ....
131

19
systemdサービスをユーザーとして実行することも可能であることに注意してください。このチュートリアルの例を参照してください。サービスファイルをに入れ~/.config/systemd/user、で開始し、systemctl --user start myappで有効にすることができsystemctl --user enable myappます。
cdauth

5
この回答をありがとう。これが私が純粋で明確にしたいものです
bmavus

5
私はこれが最良の方法だと思うので、「永遠に」という答えの代わりにこの答えを受け入れました。MacとWindowsにも同様の答えがありますが、大多数はLinuxソリューションを探していると思います。
Peter Kruithof、

11
EC2 AMIパスに/ etc / systemd / systemが存在しません。AWS EC2 Linux AMIの正しいパスは何ですか?
ルネ・ミシェル

241

Foreverを使用できます。これは、特定のノードスクリプトが継続的に(つまり、永久に)実行されるようにするためのシンプルなCLIツールです。https//www.npmjs.org/package/forever


4
最新のノードでは、スクリプト名(エラー)を介してアプリを停止することができませんでした。また、通常、正常に動作しない(OS-Xの場合)-すべて、奇妙なことにソースからビルドされました。物事を悪い状態のままにして、私を自信で満たすことができませんでした。
Michael Neale

4
nohupがトリックを行いますが、プロセスをデーモン化するので、永遠に優れたソリューションです。素晴らしいツール!
Peter Kruithof、2011年

5
ところで、より簡単なチュートリアルがここにあります:node.jsサーバーをForeverで
稼働状態に保つ

2
私はしばらくフォーエバーを使いましたが、最初はすべて大丈夫なようですが、災害が起こりました。永遠にプロセスを管理できなくなり、ワイルドに実行できなくなりました。まだより良い解決策を見つけるのに苦労しています。nohupを使用しようとします
LN

5
Geoffrey-いいえ、forever start /path/to/yourApp.jsサーバーの起動スクリプトで行う必要があります。
mikermcneil 2013

215

更新 -以下の回答の1つで述べたように、PM2には、永遠に欠けている本当に素晴らしい機能がいくつかあります。それを使用することを検討してください。

元の回答

nohupを使用します。

nohup node server.js &

編集私は受け入れられた答えが本当に行く方法であることを付け加えたかったです。稼働し続ける必要のあるインスタンスで永久に使用しています。私はnpm install -g foreverそうするのが好きなので、それはノードパスにあり、それからちょうどしますforever start server.js


136
知っておくべきクールな部分:nohupno hangup、モデムを「ハングアップ」したときにプロセスを存続させたいという昔からの略です。
jAndy

1
最近では、ユーザーがシェルを閉じたこと(またはモデム接続が失われたことはもちろん:P)を警告するためにプロセスreceiveが信号1の名前です
lapo

7
アプリでキャッチされていないエラーが発生した場合、ノードプロセスが終了して再起動しないため、これは最適なソリューションではありません。それでも、それは開発のための合理的なオプションです。
アンディE

1
環境変数をそれにどのように追加しますか?例:PORT = 80ノードserver.js
Pardoner

1
SOからこの答えをチェックアウト- stackoverflow.com/questions/8825460/...
NG。

67

これは受け入れられない方法かもしれませんが、私は画面でそれを行います。特に、開発中にそれを元に戻し、必要に応じてそれをだますことができるためです。

screen
node myserver.js
>>CTRL-A then hit D

画面は切り離され、ログオフしても存続します。次に、screen -rを実行して元に戻すことができます。詳細については、画面のマニュアルを参照してください。画面に名前を付けることができます。


2
また、tmuxもいいです。画面のように機能します(CTRL-AではなくCTRL-Bがデフォルトですが、構成可能です)。Tmuxにはパネル(分割画面)があります。
snapfractalpop 2012年

1
画面にもパネルがあります
ビリームーン

私はこれを数週間から流星アプリに使用しています。デタッチと再アタッチのための `$ screen -dr 'が時々必要になるかもしれません。
Vinay Vemula

私にとっては、仕事を完了する最も簡単な方法です。しかし、私は同意します。最善の解決策ではありません
Pomme De Terre

このソリューションは、システムの再起動後は保持されません
wnasich

60

2016年の更新: node-windows / mac / linuxシリーズは、すべてのオペレーティングシステムで共通のAPIを使用しているため、完全に関連するソリューションです。しかしながら; node-linuxはsystemv initファイルを生成します。systemdの人気が高まるにつれ、現実的にはLinuxでのオプションとしてより優れています。systemdサポートをnode-linuxに追加したい場合は、PRを歓迎します:-)

元のスレッド:

これはかなり古いスレッドですが、node-windowsはWindowsでバックグラウンドサービスを作成する別の方法を提供します。これは、大まかに、ノードスクリプトの周りにラッパーnssmを使用するという概念に基づいていexeます。しかしながら; winsw.exe代わりに使用し、構成可能なノードラッパーを提供して、障害時にプロセスが開始/停止する方法をより詳細に制御します。これらのプロセスは、他のサービスと同様に利用できます。

ここに画像の説明を入力してください

このモジュールは、いくつかのイベントロギングでもベイクします。

ここに画像の説明を入力してください

スクリプトのデーモン化は、コードを通じて行われます。例えば:

var Service = require('node-windows').Service;

// Create a new service object
var svc = new Service({
  name:'Hello World',
  description: 'The nodejs.org example web server.',
  script: 'C:\\path\\to\\my\\node\\script.js'
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

// Listen for the "start" event and let us know when the
// process has actually started working.
svc.on('start',function(){
  console.log(svc.name+' started!\nVisit http://127.0.0.1:3000 to see it in action.');
});

// Install the script as a service.
svc.install();

このモジュールは、再起動の上限(悪いスクリプトがサーバーに影響を与えないようにする)や再起動間の時間間隔の増加などをサポートします。

node-windowsサービスは他のサービスと同じように実行されるため、すでに使用しているソフトウェアでサービスを管理/監視することが可能です。

最後に、make依存関係はありません。言い換えれば、単純明快npm install -g node-windowsに機能します。これをインストールするには、Visual Studio、.NET、またはnode-gypのマジックは必要ありません。また、MITおよびBSDライセンスです。

完全な開示では、私はこのモジュールの作者です。これは、OPが経験した正確な苦痛を軽減するように設計されましたが、オペレーティングシステムがすでに提供している機能とより緊密に統合されています。これと同じ質問を持つ将来の視聴者に役立つと思います。


8
これをnode-macに移植して、OSXで同じ機能を提供します。
コーリー

1
私はいくつかのNodeプログラムをスケジュールし、node-windows、ForeverまたはKueを選択する決定の前に立つようになりました。私はノードウィンドウに傾いていますが、何十ものノードプログラムをスケジュールおよび監視するときに、ForeverやKueを使用しないのはなぜか理解したいと思います。一部は永久に実行されます。監視も必要です。
Christiaan Westerbeek、2014年

5
Node-windowsは、バックグラウンドサービスの管理にネイティブOSを使用し、ロギングにネイティブイベントログを使用します。Foreverには独自のカスタムモニタリングとロギングがあります。これについては、medium.com / p / 2a602ea657a2 に記事を書きました。スクリプトを常にバックグラウンドサービスとして実行するのではなく、スケジュールする必要があるようです。KueやAgendaなどのプロジェクトは、このために設計されています。ノードウィンドウとフォーエバーは別の目的を果たします。
コーリー2014年

1
@ Corey、node-macに含まれている例をどのように実行しますか?ターミナルから、node install.jsを試しましたが、helloworld.jsをピックアップしないようです
Edwin Ikechukwu Okonkwo

@Edwin-使用しているコードを含め、問題についての詳細を含む新しい質問を開くのが最善の場合があります。
Corey

28

更新:私はpm2からの最新を含むように更新しました:

多くのユースケースでは、systemdサービスを使用するのがノードプロセスを管理する最も簡単で最も適切な方法です。単一の環境で多数のノードプロセスまたは独立して実行されるノードマイクロサービスを実行している場合、pm2はより充実した機能を備えたツールです。

https://github.com/unitech/pm2

http://pm2.io

  • それは本当に便利な監視機能を持っています->複数のプロセスのコマンドライン監視pm2 monitまたはpm2 list
  • 整理されたログ管理-> pm2 logs
  • 他のもの:
    • 動作構成
    • ソースマップのサポート
    • PaaS互換
    • ウォッチ&リロード
    • モジュールシステム
    • 最大メモリのリロード
    • クラスターモード
    • ホットリロード
    • 開発ワークフロー
    • 起動スクリプト
    • 自動補完
    • 導入ワークフロー
    • キーメトリクス監視
    • API

20

スクリプトが完了するまで中断することなく単にスクリプトを実行したい場合nohupは、ここでの回答で既に述べたように使用できます。ただし、どの回答も、ログstdinとを含む完全なコマンドを提供しませんstdout

nohup node index.js >> app.log 2>&1 &
  • >>追加する手段app.log
  • 2>&1エラーもに送信されstdout、に追加されますapp.log
  • 終了&すると、現在の端末がコマンドから切断され、作業を続行できるようになります。

ノードサーバー(またはサーバーの再起動時にバックアップを開始するもの)を実行する場合は、systemd / systemctlを使用する必要があります。


1
ベストアンサーm8。
bholagabbar 2018

1
うまく説明された
Prakhar Prakash Bhardwaj

19

OSXを実行している場合、真のシステムプロセスを生成する最も簡単な方法は、それlaunchdを起動することです。

次のようなplistを作成し、/ Library / LaunchDaemonsに名前を付けてtop-level-domain.your-domain.application.plist配置します(配置するときはrootである必要があります)。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>top-level-domain.your-domain.application</string>

    <key>WorkingDirectory</key>
    <string>/your/preferred/workingdirectory</string>

    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/node</string>
        <string>your-script-file</string>
    </array>

    <key>RunAtLoad</key>
    <true/>

    <key>KeepAlive</key>
    <true/>

</dict>
</plist>

完了したら、これを(rootとして)発行します。

launchctl load /Library/LaunchDaemons/top-level-domain.your-domain.application.plist
launchctl start top-level-domain.your-domain.application

そしてあなたは走っています。

また、再起動後も実行されます。

plistの他のオプションについては、こちらのmanページをご覧ください。https//developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man5/launchd.plist.5.html


これはどのユーザーとしてサービスを実行しますか?ユーザーを設定する方法はありますか?
rjmunro

15

nohupを使用している場合は、このコマンドを実行してみてください-

nohup npm start 2>/dev/null 1>/dev/null&

永遠にサーバーを起動することもできます

forever start -c "npm start" ./ 

PM2もサポート npm start

pm2 start npm -- start

2
thnx、これは完全に機能しました。 pm2 start npm -- start
yadavr

13

私は単にデーモン npmモジュールを使用しています

var daemon = require('daemon');

daemon.daemonize({
    stdout: './log.log'
  , stderr: './log.error.log'
  }
, './node.pid'
, function (err, pid) {
  if (err) {
    console.log('Error starting daemon: \n', err);
    return process.exit(-1);
  }
  console.log('Daemonized successfully with pid: ' + pid);

  // Your Application Code goes here
});

最近、TJ Holowaychukのmon(1)を使用して、単純なノードアプリを起動および管理しています。


12

開発にはスーパーバイザーを使用しています。うまくいきます。.jsファイルを変更すると、Supervisorは自動的にアプリを再起動し、それらの変更を読み込みます。

ここにGithubページへのリンクがあります

インストール:

sudo npm install supervisor -g

-eを使用すると、他の拡張機能を簡単に監視できます。私がよく使用する別のコマンドは、特定のフォルダーを無視する-iです。

ログアウトした後でも、nohupとスーパーバイザーを使用して、ノードアプリをバックグラウンドで実行できます。

sudo nohupスーパーバイザーmyapp.js&


1
実際には、スーパーバイザはほとんどのデーモンモジュールよりも優れたオプションであり、特に更新をチェックアウトするためにWebhookと組み合わせて使用​​されると思います。
Iain Collins、

私はこれを2番目にします。PHPファイルを変更した場合、ApacheまたはNginxサーバーを再起動しますか?絶対にありません。では、なぜ1行のコードを変更するだけでも、Node.jsサーバー全体を再起動する必要があるのでしょうか。これは最善の解決策ではないかもしれませんが、少なくともスーパーバイザとの連携により、再起動プロセスを心配する必要はありません(実際には再起動はまだ行われています)。
Zhang Buzz

7

WINDOWS XPのバックグラウンドサービスとしてのNode.js

インストール:

  1. インストーラーの実行可能ファイルを介してWGET http://gnuwin32.sourceforge.net/packages/wget.htmをインストールします
  2. インストーラーの実行可能ファイルを介してGIT http://code.google.com/p/msysgit/downloads/listをインストールします
  3. nnsm.exeを%windir%/ system32フォルダにコピーして、NSSM http://nssm.cc/download/?page=downloadをインストールします
  4. c:\ node \ helloworld.jsを作成します

    // http://howtonode.org/hello-node
    var http = require('http');
    var server = http.createServer(function (request, response) {
        response.writeHead(200, {"Content-Type": "text/plain"});
        response.end("Hello World\n");
    });
    server.listen(8000);
    console.log("Server running at http://127.0.0.1:8000/");
  5. コマンドコンソールを開き、次のように入力します(setxはリソースキットがインストールされている場合のみ)。

    C:\node> set path=%PATH%;%CD%
    C:\node> setx path "%PATH%"
    C:\node> set NODE_PATH="C:\Program Files\nodejs\node_modules"
    C:\node> git config --system http.sslcainfo /bin/curl-ca-bundle.crt    
    C:\node> git clone --recursive git://github.com/isaacs/npm.git    
    C:\node> cd npm    
    C:\node\npm> node cli.js install npm -gf   
    C:\node> cd ..    
    C:\node> nssm.exe install node-helloworld "C:\Program Files\nodejs\node.exe" c:\node\helloworld.js    
    C:\node> net start node-helloworld
  6. 気の利いたバッチの良い点は、c:\ node \ ServiceMe.cmdを作成することです

    @echo off
    nssm.exe install node-%~n1 "C:\Program Files\nodejs\node.exe" %~s1
    net start node-%~n1
    pause

サービス管理:

  • サービス自体は、スタート->ファイル名を指定して実行-> services.mscまたはスタート->ファイル名を指定して実行-> MSCONFIG->サービスからアクセスできます([Microsoftサービスをすべて隠す]をオンにします)。
  • スクリプトは、バッチスクリプトで作成されたすべてのノードの前に「node-」を付けます。
  • 同様に、それらはレジストリで見つけることができます: " HKLM \ SYSTEM \ CurrentControlSet \ Services \ node-xxxx "

7

受け入れられた答えはおそらく最良の本番の答えですが、開発作業を行う迅速なハックのために、私はこれを見つけました:

nodejs scriptname.js & nodejsが&を飲み込んでいるように見えたため、機能しませんでした。そのため、scriptname.jsが停止することなく端末を使い続けることができませんでした。

しかし、私nodejs scriptname.jsは.shファイルを入れて nohup sh startscriptname.sh &作業しました。

確かに生産的なものではありませんが、「端末を使い続ける必要があり、5つの異なる端末を起動したくない」という問題は解決します。


4

Linuxサーバーでnodejsを実行している場合、これが最良の方法だと思います。

サービススクリプトを作成し、/ etc / init / nodejs.confにコピーします

サービスの開始:sudoサービスnodejs start

サービスの停止:sudo service nodejs stop

サービススクリプト

description "DManager node.js server - Last Update: 2012-08-06"
author      "Pedro Muniz - pedro.muniz@geeklab.com.br"

env USER="nodejs" #you have to create this user 
env APPNAME="nodejs" #you can change the service name
env WORKDIR="/home/<project-home-dir>" #set your project home folder here
env COMMAND="/usr/bin/node <server name>" #app.js ?

# used to be: start on startup
# until we found some mounts weren't ready yet while booting:
start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

pre-start script
    sudo -u $USER echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/$APPNAME.log
end script

script
    # Not sure why $HOME is needed, but we found that it is:
    export HOME="<project-home-dir>"  #set your project home folder here
    export NODE_PATH="<project node_path>"

    #log file, grant permission to nodejs user
    exec start-stop-daemon --start --make-pidfile --pidfile /var/run/$APPNAME.pid --chuid $USER --chdir $WORKDIR --exec $COMMAND >> /var/log/$APPNAME.log 2>&1
end script

post-start script
   # Optionally put a script here that will notifiy you node has (re)started
   # /root/bin/hoptoad.sh "node.js has started!"
end script

pre-stop script
    sudo -u $USER echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/$APPNAME.log
end script

4

2017年6月更新:
Linux向けソリューション:(Red Hat)。以前のコメントは機能しません。これは、Amazon Web Service-Red Hat 7で私にとってはうまくいきます。

A. Create the service file 
sudo vi /etc/systemd/system/myapp.service
[Unit]
Description=Your app
After=network.target

[Service]
ExecStart=/home/ec2-user/meantodos/start.sh
WorkingDirectory=/home/ec2-user/meantodos/

[Install]
WantedBy=multi-user.target

B. Create a shell file
/home/ec2-root/meantodos/start.sh
#!/bin/sh -
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080
npm start

then:
chmod +rx /home/ec2-root/meantodos/start.sh
(to make this file executable)

C. Execute the Following

sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl status myapp

(If there are no errors, execute below.  Autorun after server restarted.)
chkconfig myapp -add

非常に興味深いですが、私はiptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080それが何をするのかを知りたいと思っています。詳細を教えてください。わかりませんが808080どのノードサーバーがリッスンしているかからトラフィックをリダイレクトすると思いますよね?
Shakiba Moshiri

3

nssmをWindowsに最適なソリューションとして使用します。単にnssmをダウンロードし、cmdをnssmディレクトリに開いて入力します。

nssm install <service name> <node path> <app.js path> 

eg: nssm install myservice "C:\Program Files\nodejs" "C:\myapp\app.js" 

これにより、services.mscにリストされる新しいWindowsサービスがインストールされ、そこからサービスを開始または停止できます。このサービスは自動的に開始され、失敗した場合に再起動するように構成できます。




1

「2>&1」の位置の些細な間違いに気づいた人はいますか?

2>&1 >> file

する必要があります

>> file 2>&1

1

リモートホストの複数ウィンドウ/ペイン開発環境にtmuxを使用しています。プロセスを切り離してバックグラウンドで実行し続けるのは本当に簡単です。見ていtmuxのを


1

デーモン npmモジュールの新しいバージョンを使用している場合-文字列の代わりにファイル記述子を渡す必要があります。

var fs = require('fs');
var stdoutFd = fs.openSync('output.log', 'a');
var stderrFd = fs.openSync('errors.log', 'a');
require('daemon')({
    stdout: stdoutFd, 
    stderr: stderrFd
});

0

PM2は、ロードバランサーが組み込まれたNode.jsアプリケーションのプロダクションプロセスマネージャーです。これにより、アプリケーションを永久に存続させ、ダウンタイムなしで再ロードして、一般的なシステム管理タスクを容易にすることができます。 https://github.com/Unitech/pm2


深刻なメモリ消費の問題!phusion + nginxに行く
Rizwan Patel

0

誰もGuvnorに言及していないことに驚いています

私はpm2など、ずっと試してみました。しかし、しっかりとした制御とWebベースのパフォーマンスメトリックに関しては、Guvnorが圧倒的に優れていることがわかりました。さらに、完全にオープンソースでもあります。

ここに画像の説明を入力してください

編集:しかし、ウィンドウズで動作するかどうかはわかりません。Linuxでのみ使用しました。


4
2017年の時点で陳腐化しているようです。ビルドに失敗しました。昨年はコードのプッシュはありません。疑わしい。
アザタール2017

0

提供された回答のリストにこのオプションがないので、2020年の時点で適格なオプションを追加したい:dockerまたは同等の コンテナープラットフォーム。アプリケーションが安定した環境で動作していることを確認することに加えて、移植性の向上だけでなく、追加のセキュリティ上の利点があります。

Windows、macOS、およびほとんど/主要なLinuxディストリビューションのdockerサポートがあります。サポートされているプラ​​ットフォームへのDockerのインストールはかなり簡単で、十分に文書化されています。Node.jsアプリケーションのセットアップは、コンテナーに配置してそのコンテナーを実行するだけで簡単であり、シャットダウン後に確実に再起動されます。

コンテナイメージを作成

アプリケーションがそのサーバーの/ home / me / my-appで利用可能であると仮定して、次のような内容のテキストファイルDockerfileをフォルダー/ home / me / my-appに作成します。

FROM node:lts-alpine
COPY /my-app /app
CMD ["/app/server.js"]

次のようなコマンドを使用してイメージを作成します。

docker build -t myapp-as-a-service /home/me

注:最後のパラメーターは、Dockerfile自体ではなく、そのDockerfileを含むフォルダーを選択することです。オプション-fを使用して別のものを選択できます。

コンテナを開始

コンテナーを開始するには、次のコマンドを使用します。

docker run -d --restart always -p 80:3000 myapp-as-a-service

このコマンドは、アプリがポート3000でリッスンしていて、ホストのポート80で公開することを想定しています。

これは確かに非常に限定された例ですが、良い出発点です。


0

pm2を使用している場合は、autorestartset toを指定して使用できますfalse

$ pm2エコシステム

これはサンプルを生成しますecosystem.config.js

module.exports = {
  apps: [
    {
      script: './scripts/companies.js',
      autorestart: false,
    },
    {
      script: './scripts/domains.js',
      autorestart: false,
    },
    {
      script: './scripts/technologies.js',
      autorestart: false,
    },
  ],
}

$ pm2開始ecosystem.config.js


-1

この回答はパーティーにかなり遅れましたが、最良の解決策はscreen -dmSnohupコマンドの両方を使用するシェルスクリプトを記述することでした。

screen -dmS newScreenName nohup node myserver.js >> logfile.log

また>> logfile、最後にビットを追加して、ノードconsole.log()ステートメントを簡単に保存できるようにします。

なぜシェルスクリプトを使用したのですか?まあ、私はまた、node myserver.jsプロセスが既に実行されているかどうかを確認するためにチェックするifステートメントに追加しました。

このようにして、単一のコマンドラインオプションを作成し、サーバーの動作を維持したり、変更を加えたときに再起動したりできるため、開発に非常に役立ちます。


2
私はこの問題に遭遇し、Linuxにかなり慣れていません。画面やnohupなしでどのように実行しますか?
Craig Norton
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.