Handle SIGINT and SIGTERM to exit gracefully

This commit is contained in:
Zaid Abdulla committed 2016-12-04 19:07:03 -08:00
1 parent 9f85ead558
commit 34de9c7e7d
2 files changed
+34 -14

No files matched your search

+15 -3
View File
@@ -24,10 +24,11 @@ cluster.on('listening', (worker, address) ->
util.log("Worker #{worker.process.pid} listening to #{address.address}:#{address.port}")
)
cluster.on('exit', (worker, code, signal) ->
util.log("Worker #{worker.process.pid} died (#{worker.process.exitCode})")
restartWorker = (worker, code, signal) ->
util.log("Worker #{worker.process.pid} died (#{worker.process.exitCode}) #{signal}")
cluster.fork()
)
cluster.on('exit', restartWorker)
start = (service) ->
@@ -43,4 +44,15 @@ start = (service) ->
cluster.fork()
process.on('SIGINT', () ->
cluster.removeListener('exit', restartWorker)
)
process.on('SIGTERM', () ->
cluster.removeListener('exit', restartWorker)
for id of cluster.workers
cluster.workers[id].kill()
)
exports.start = start
+19 -11
View File
@@ -20,6 +20,8 @@ util = require 'util'
cluster = require 'cluster'
config = require './config'
db = require './db'
extensions = require './extensions'
service = config.argv[0]
if not service?
@@ -34,23 +36,25 @@ onConnection = require("./#{service}").onConnection
server = null
exit = () ->
setTimeout(() ->
process.exit(1)
, 30000).unref()
cluster.worker?.disconnect()
server.close(() ->
db.disconnect()
extensions.killAll()
)
listener = (httpRequest, httpResponse) ->
d = domain.create()
d.on('error', (err) ->
util.error("#{new Date().toISOString()} - #{err.stack}\n")
try
killTimer = setTimeout(() ->
process.exit(1)
, 30000)
killTimer.unref()
cluster.worker?.disconnect()
server.close(() ->
db.disconnect()
)
exit()
httpResponse.writeHead(500, {'Connection' : 'close'})
httpResponse.end("#{err.name}: #{err.message}")
catch err2
@@ -85,3 +89,7 @@ db.connect((err) ->
throw err if err
server.listen(port, networkInterface)
)
process.on('SIGINT', exit)
process.on('SIGTERM', exit)