2013-04-12 6 views
5

私はクラスタと永遠にアプリケーションを持っています。私は、シャットダウンまたはアプリケーションの再起動の前に、労働者からの情報を保存したい。だから私はprocess.on( 'SIGINT')を使用し、それはCtrl + Cのためにうまく動作します。Foreverモジュールによるアプリケーションの再起動の検出方法

しかし、私は永遠と付き合っています。アプリが何らかの理由でForeverによって再起動されたことを検出することは可能ですか?それについて何かシグナルがありますか?フォーエバー

答えて

0

はSIGKILLがhttps://github.com/nodejitsu/forever-monitor/blob/master/lib/forever-monitor/monitor.js#L353

を参照してください使用していますので、その後永遠にそうprocess.on('SIGTERM', onStop)だけでなく、「SIGTERM」を送信しkillhttps://github.com/nodejitsu/forever-monitor/blob/master/lib/forever-monitor/common.js#L45を使用することに注意してくださいかかわらず、あなたのprocess.on('SIGINT', onStop);process.on('SIGKILL', onStop);を追加します。

+5

'SIGKILL'はプロセスによって捕らえられません。 Nodeで試してみると、 'EINVAL'エラーが出ます。 – robertklep

0

デモを再起動する前にkill -s SIGUSR1 <pid>を実行することをお勧めします。この信号は、process.on('SIGUSR1')によってノードに簡単に捕捉できます。

kill -s SIGUSR1 <pid> 
forever restart test.js 
+1

これは、適切な清掃を行う時間がない場合sigkillの直前にsigusrを送信するのは何ですか? – bumpmann

+0

これは回避策の1つで、正常なシャットダウンのための完全な解決策ではありません。 btwを望むなら、 'sleep 30 && forever restart test.js'を使うことができます。 – deadrunk

3

この問題はかなり古いですが、それを見ていなかった人のために、最新の永遠のバージョンは--killSignalサポート(これは2013年12月に追加されている)ので、あなたは一例​​で使用し、この信号をキャッチすることができますprocess.on('SIGUSR2', func)

0

永遠に--killSignalオプションがあります。それを他のキャッチ可能なシグナル(SIGINTなど)にカスタマイズし、アプリでprocess.on( 'SIGINT'、...)を使用してキャッチします。 official exampleがありますが、console.logステートメントはシグナルハンドラには何の効果もありません。私はバグだと思っています。