是否建议使用Node.js中的cron作业的子进程?

时间:2018-12-09 02:48:14

标签: javascript node.js express child-process

我有一个Express服务器作为我的react应用程序的后端。每个用户每周应收到一封电子邮件。我查看了Node中的cron作业是如何完成的,这似乎很简单。我只是设置一个cron作业来触发相应的功能,该功能遍历所有电子邮件地址并发送邮件。但是,我不完全确定这是否可行。

发送电子邮件时,服务器必须存储已发送的收据。为此,它将电子邮件地址传递给相应的API,并等待收据将其存储在DB中。因此,每位用户发送电子邮件可能需要几分钟的时间。

现在,我想知道是否为此任务设置cron作业会阻塞我的整个服务器,直到发送所有电子邮件为止。是否建议创建一个由cron作业触发的子进程来遍历所有电子邮件地址?

如果您能给我一些一般性建议和示例,那就太好了,这样我就知道如何开始了。谢谢您的宝贵时间。

1 个答案:

答案 0 :(得分:1)

this answer中所建议,它不应被阻止。

但是,我认为最好不要在主服务器文件上使用像这样的繁琐的cron作业。如果可以,您应该运行一个单独的node.js应用程序,该应用程序仅处理cron作业。

子进程不应用于您可以轻松处理JS的事物。您应保留它们以用于特定任务,例如数据库备份。

var exec = require('child_process').exec;
var CronJob = require('cron').CronJob;

new CronJob('00 14 * * 4', function() {
  sendNewsletter();
}, null, true);

new CronJob('00 12 * * *', function() {
  exec('sh dbbackup.sh', function(err, stdout, stderr){
    if (err) {
        // handle error
    }
  });
}, null, true);