代码之家  ›  专栏  ›  技术社区  ›  jz22

是否建议node.js中cron作业的子进程?

  •  0
  • jz22  · 技术社区  · 6 年前

    我有一个快速服务器作为我的React应用程序的后端。每周一次,每个用户都应该收到一封电子邮件。我已经查看了cron作业是如何在节点中完成的,它看起来非常直接。我只需要设置一个cron作业来触发相应的函数,该函数循环访问所有电子邮件地址并发送邮件。然而,我不完全确定这是不是该走的路。

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

    现在我想知道为这个任务设置一个cron作业是否会阻止我的整个服务器,直到所有电子邮件都被发送。是否建议创建一个由cron作业触发的子进程以循环访问所有电子邮件地址?

    如果你能给我一些一般性的建议或者例子,这样我就知道如何开始了,那就太好了。谢谢你抽出时间。

    1 回复  |  直到 6 年前
        1
  •  1
  •   atmys    6 年前

    如中建议的 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);