Un sencillo servidor corriendo sobre Node.js puede permitir la recarga sin interrupciones, de manera amistosa, algo parecido al reload de Apache u otros demonios en Linux. Para ello sólo es necesario que haya un proceso padre que lance hijos y les envíe señales según sea necesario. Sin embargo el cierre de las conexiones esperando a que estas terminen puede dar algunas complicaciones cuando hay un WebSocket.
La gestión de padre e hijos se puede hacer con el módulo cluster. En este ejemplo el script a lanzar manualmente es master.js. Él a su vez lanzará al script server.js y le pasará las señales SIGHUP para recargar el servidor (terminar amistosamente) o SIGTERM para terminar sin piedad.
master.js:
'use strict'; var cluster = require('cluster'); const path = require('path'); cluster.setupMaster({ exec: path.join(__dirname, 'server.js') }); //fork the first process cluster.fork(); process.on('SIGHUP', function () { var new_worker = cluster.fork(); new_worker.once('listening', function () { //stop all other workersS for (var id in cluster.workers) { if (id === new_worker.id.toString()) continue; cluster.workers[id].process.kill('SIGHUP'); } }); }).on('SIGTERM', function () { for (var id in cluster.workers) { cluster.workers[id].process.kill('SIGTERM'); } });