Issue
My node app exits immediately during a dyno restart causing H13 errors.
Resolution
When the dyno manager restarts a dyno, the dyno manager will request that your processes shut down gracefully by sending them a SIGTERM signal. This gives the process 30 seconds to finish any current requests.
Node apps need to listen for that signal and handle them appropriately to avoid the process from exiting immediately:
const http = require('http');
process
.on('SIGTERM', shutdown('SIGTERM'))
.on('SIGINT', shutdown('SIGINT'))
.on('uncaughtException', shutdown('uncaughtException'));
setInterval(console.log.bind(console, 'tick'), 1000);
http.createServer((req, res) => res.end('hi'))
.listen(process.env.PORT || 3000, () => console.log('Listening'));
function shutdown(signal) {
return (err) => {
console.log(`${ signal }...`);
if (err) console.error(err.stack || err);
setTimeout(() => {
console.log('...waited 5s, exiting.');
process.exit(err ? 1 : 0);
}, 5000).unref();
};
}