I'm using node.js cluster module to create worker processes. And I set a custom variable in each worker's environment as I fork it.
I need to read that custom variable when a worker dies, but when a worker dies, I can't access its environment object anymore.
This is what I tried so far:
var cluster = require('cluster'),
os = require('os');
if (cluster.isMaster) {
cluster.on('exit', function (worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
var x = {
workerId: worker.process.env.workerId // This is undefined.
};
cluster.fork(x);
});
for (var i = 0; i < os.cpus().length; i++) {
var x = {
workerId: i
};
cluster.fork(x);
}
}
else {
console.log("workerId: ", process.env.workerId);
// simulate an exeption:
throw "fakeError";
}
I know that's not gonna work, my question is: how to access to latest state of a worker's envoronment right before its death?
It seems that env only set in worker's process and is not accessible in master. Master only have primitive information about workers process. You can do what you want like:
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
var env = {workerId: i},
newWorker = cluster.fork(env);
newWorker.process.env = env;
}
cluster.on('exit', function (worker, code, signal) {
console.log('worker ', worker.process.env.workerId, ' died');
var env = worker.process.env,
newWorker = cluster.fork(env);
newWorker.process.env = env;
});
I hope it helps you. Whenever workers change their env, they should send message to master and inform it about those changes, so, master can update its information.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With