Проблема, с которой я столкнулся, заключается в том, что проект уже запрограммирован с помощью cluster
для распределения задач.
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
});
} else {
var server = http.createServer(app);
var usernames = {};
var showusernames = {};
var usersmessages = [];
require('../server/controllers/communication/chat.js').chatConfig(io, usernames);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
}
У меня есть основная идея, что этот код предназначен для распределения задач между процессорами и поддержания работы сервера в случае отказа одного процессора.
Вопрос в следующем: все работало нормально, пока мне не пришлось работать с узлом, чтобы запланировать задание cron
(которое будет отправлять электронную почту). Теперь cron запускается всеми рабочими одновременно, и электронное письмо отправляется рабочему в зависимости от того, сколько процессоров на сервере. Работник I выбрал свой путь, запланировав работу как:
if(cluster.isWorker)
if(cluster.worker.id == 1){
cron.schedule('*/1 * * * *', function() {
//CRON JOB
})
}
Это работало очень хорошо в локальной системе, но не удалось на промежуточном сервере, возможно, из-за того, что ЦП был привязан к этому самому проекту.
Есть ли способ получить только первого свободного работника и назначить ему задачу.
Теперь я попробовал это
var wokerArr = []
wokerArr.push(cluster.worker.id)
if(cluster.worker.id == wokerArr[0])
cron.schedule('*/1 * * * *', function() {
//CRON JOB
})