この両方のパッケージを一緒に実行する方法はありますか?
ですから、基本的には両方の長所を持ちたいと思っています。サーバーを自動的に実行し (エラーが発生した場合は再起動します)、.js ファイルの変更が発生した場合は自動更新します。
Toxa は正しい方向に進んでいました。cfogelberg が提起した問題は有効ですが、その問題を回避するには、次のことを実行できます。
forever -c "nodemon --exitcrash" app.js
これによりnodemon
、(「アプリがクラッシュしました」というメッセージが表示されるのではなく) 実際に終了forever
し、再び起動します。
これで実行するコマンドを指定forever --help
し-c
ます。それ以外の場合はデフォルトのノードです。-c を指定しないと、この回答のコメントに記載されているエラーが発生します。
nodemon
FAQにそれに関するエントリがあります。
nodemon を 永遠に (おそらく実稼働環境で) 使用している場合は、2 つを組み合わせることができます。このようにして、スクリプトがクラッシュした場合、スクリプトを完全に再起動し、ファイルが変更された場合、nodemon がスクリプトを再起動します。詳しくは第30号をご覧ください。
これを実現するには、への呼び出しに次を追加する必要があります
forever
。
- forever の
-c nodemon
オプションを使用して、 forever のnodemon
代わりに実行するように指示しますnode
。--exitcrash
スクリプトがクラッシュした場合 (または予期せず終了した場合) に nodemon が終了するようにするには、nodemonフラグを含めます。- nodemon に停止を要求するとき
SIGTERM
の代わりに、永久に使用するように指示します。SIGKILL
これにより、nodemon は監視対象のノード プロセスを確実に停止できます。- 必要に応じて
--uid
パラメーターを追加し、プロセスに一意の名前を追加します。この例では、uid は に設定されていfoo
ます。
bash forever start --uid foo --killSignal=SIGTERM -c nodemon --exitcrash server.js
これをテストするには、server.js プロセスを強制終了し、永遠に再起動します。
touch server.js
nodemon が再起動する場合。forever と nodemon によって監視されているプロセスを停止するには、
uid
上記で割り当てた (foo
)を使用して、以下を呼び出すだけです。
bash forever stop foo
これにより、nodemon とそれが監視していたノード プロセスの両方が停止します。
実稼働環境でnodemonを使用することはお勧めしませんが、明示的な指示なしに再起動したくないためです。
両方のパッケージを一緒に実行する方法が見つかりませんでした。@toxa の手法を実行しようとしましたが、node.js アプリが例外をスローしたとき、nodemon は自動的にアプリを再起動せず、代わりに永久ログにエラー メッセージを出力しました。
nodemon] app crashed - waiting for file changes before starting...
ただし、forever には-w
オプションがあり、次のコマンドは事実上、nodemon と forever を一緒に実行している場合と同じです。
forever start -w my-app.js
vs :のマイナス面にはforever -w
--delayオプションがないため、変更されたファイルごとにサーバーが 1 回再起動されます。nodemon
forever
Toxa と Jubair が提案する組み合わせが好きです。
forever start -c nodemon app.coffee --exitcrash
引数を渡す必要がある場合:
forever start -c "nodemon --harmony" app.js --exitcrash