2016-11-20 20 views
2

Upstartによって管理されているnode.js/express/socket.ioサーバーがあります。サーバはbashで、このコマンドを実行することにより、停止している:nodejsは以下の内容を含む、成り上がりのスクリプトで、「nodejsを停止」:終了前にnode.jsをクリーンアップ

#!upstart 
description "node.js" 

# Start the job 
start on runlevel [2345] 

# Stop the job 
stop on runlevel [016] 

# Restart the process if it dies 
respawn 

script 
    cd /var/www/node_server/ 
    exec /usr/local/node/bin/node /var/www/node_server/chatserver.js >> /var/www/node_server/chatserver.log 2>&1 
end script 

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

我々は、サーバーが同じように停止される直前に、いくつかのクリーンアップ作業を実行したいのですが上記の通り。私たちはprocess.on( 'exit' ...)とprocess.on( 'SIGINT' ...)の両方を無駄にしようとしました。

サーバーが停止する直前にコールバックを呼び出す方法はありますか。ドキュメントへのダイビング後

+0

あなたがそれを実行しない 'ストップnodejs'を、明確にすることができますか?どのようにそれを実行するのですか? – Bamieh

+0

はい。私の新しい編集を見てください。 –

答えて

1

、プログラムを終了させる成り上がり火災SIGTERM信号: http://upstart.ubuntu.com/cookbook/#stopping-a-job

ので、あなたがノードを使用して、この信号に耳を傾ける: https://nodejs.org/api/process.html#process_signal_events

SIGTERMがWindowsでサポートされていません、それを聞くことができます。

短い例:

// Begin reading from stdin so the process does not exit. 

process.stdin.resume(); 

// listen to the event 

process.on('SIGTERM',() => { 
    console.log('some cleanup here'); 
}); 

これは、仕事をする必要があります。

また、ノードを正しく閉じるために、サービスを閉じる前に手動でノードを閉じることができるpre-stop upstartイベントがあります。

http://upstart.ubuntu.com/cookbook/#pre-stop

+1

これは機能します!ありがとう。 –