NodeJS中的Crons

长时间运行且定时的节点流程

有好几次我需要处理某个NodeJS流程,该流程需要在某个时间发生,并且可能需要很长时间才能完成。 我不想让该过程成为请求和响应流的一部分,也不想使用setTimeout.来管理它setTimeout.

我发现最容易维护和理解的方法是使用Cron作业。

我将分享一个在NodeJS中使用cron库的简单示例。 此示例将仅使用Twilio向您自己发送短信,或在每个工作日发送任意数量的短信。 这是Cron的最酷部分。 您可以定义要运行流程的一周中的某些天,某些小时,甚至可以定义确切的秒数。

步骤1

出于我之前提到的不对服务器的主要请求/响应流进行处理的原因,让我们创建一个服务器并将该过程交给子进程。

创建一个新目录并根据需要命名。 say-hello

跑:

  mkdir说-hello && cd说-hello && npm init -y 

安装依赖项

  npm i-保存cron身体解析器摩根 

让我们创建一个名为server.js的新文件

该服务器文件没有做太多事情,它的主要目标是在第15-19行中定义的,我们在该行中启动子进程并检查是否有消息返回,以告诉我们何时该文件已成功运行。

第2步

现在有趣的部分。
在单独的文件child.js添加以下内容

一旦我们添加了实际的sayHello文件并编写了cron,这将更加有意义。

像这样设置子进程有助于将来我们添加新的cronJobs时使用。

这将使我们能够跟踪正在运行的作业,并在必要时将其停止。 由于我们拥有可以与此子进程来回通信的服务器,因此我们甚至可以创建一条路由,该路由将调用方法stop并取消cron作业。

第三步

现在,让我们实际创建将发送文本消息的脚本。 我使用Twilio来创建短信。 您可以在此处创建一个帐户,然后获取您的account_sid, number,auth_token.

只要确保将号码更改为您要发送给的人!

我们的onTick函数是将一遍又一遍运行的函数。

重要的部分是我们return new CronJob这个构造函数采用cronTime ,它处理何时实际运行onTick函数的onTick

Cron时间的组织方式如下:

  • 秒:0–59
  • 分钟:0–59
  • 时间:0–23
  • 每月的日期:1-31
  • 月:0-11(一月至十二月)
  • 星期几:0–6(周日至周六)

59 * 0-23/3 20 0-5 1-5说:

我想在1月和6月之间的每个月20号运行此程序,并在第59秒的第三个小时每分钟运行一次。

如您所见,在特定的预定时间执行任务变得非常强大。

我希望这可以帮到你! 让我知道您将在项目中使用cron作业!