我在node.js中有一个应用程序.
本申请分为3部分:
launcher.js,启动另外两个部分,并在处理清理后在崩溃/更新时重新启动它们.
app.js,自己在电脑上工作.
server.js,用于访问日志和不同的命令.
启动器的简化代码是:
var cluster = require('cluster'), exec = require('child_process').exec, server; if (cluster.isMaster) { cluster.fork(); server = exec('server.js'); cluster.on('exit', function(worker, code, signal) { //Clean corrupted data, log crash if neccessary, reload source code for update ... cluster.fork(); }); server.on('exit', function () { //Same as for app, with a different handling of signal... server = exec('node server.js'); }); } else { var self = require('app.js'); self.start(); }
集群的好处在于它们与启动程序处于同一个进程中,因此我可以处理一些错误,而无需重新启动应用程序(只需在应用程序内部调用正确的函数进行"软重启"),并保持一切都在同一个过程中.
虽然有了exec,我仍然坚持重新启动服务器,有时不知道出了什么问题,这意味着有一个子shell,我不喜欢.
有没有办法分叉群集,但启动不同的代码?