2

コミットが行われるたびにNode.jsサーバーにコードを自動デプロイし、サーバーを永久に再起動する単純なbashスクリプトを作成しました。このスクリプトは、cronjob で定期的に実行されます。そうそう、サイトはまだリリース前の開発段階にあるため、サーバーは常に再起動しています。:)

このスクリプトは他にもいくつかのことを行いますが、実際に興味深い部分は次の 2 行のコードです。

forever stopall
forever start app.js

コマンドラインから手動でスクリプトを実行すると、これら 2 つのコマンドから次の出力が生成されます。

Stopping all node jobs
info:    Forever stopped processes:
data:        uid  command             script forever pid   logfile                          uptime
data:    [0] ev5a /usr/local/bin/node app.js 17482   17484 /home/ec2-user/.forever/ev5a.log 0:0:13:17.967
Starting up node server again
info:    Forever processing file: app.js

ただし、ジョブが cron 経由で自動的に実行されると、次のように出力されます。

Stopping all node jobs
^[[32minfo^[[39m:    No forever processes running
Starting up node server again
^[[32minfo^[[39m:    Forever processing file: ^[[90mapp.js^[[39m

これは私にとって本当に奇妙です。スクリプトが cron を介して実行されると、Forever は停止しようとしたときに実行中の Node プロセスさえないと考えているようです。Node プロセスが実行されていることはわかっているので、なぜこれが表示されるのかわかりません。2 つの実行方法に違いはないようです。両方のスクリプトが同じユーザーとして実行されています。なぜフォーエバーがこのように奇妙な振る舞いをしているのか誰か知っていますか?

4

2 に答える 2

0

私はそれをテストしていませんが、 --exitcrash フラグなどのいくつかの永遠のオプションを調べたいと思うかもしれません。

サーバーを自動的に再起動する他のプログラムを扱う場合、永遠に問題があります。Chron に固有のものではありませんが、このリンクが役立つ場合があります。

于 2013-03-07T20:17:46.117 に答える