如何在 linux 中的特定日期特定时间制作节点 js 文件 运行?

How can I make a node js file run on a certain date at a certain time in linux?

我将离开一个周末,我需要在特定时间和日期将 node.js 文件发送到 运行。我还没有找到通过 javascript 执行此操作的任何方法,但显然 cron 有效(我正在 运行ning linux)。

我创建了一个 运行 是 nod.js 文件的 sh 文件,并通过 cron 运行 获得了它,但它根本没有 运行。我不知道这是否与 Puppeteer + Node.js 有关,但没有脚本 运行...

我也试过使用 at 命令,但也没用

对于 cron,我添加了以下行:

20 14 2 5 * ~/.../start.sh

sh 文件是:

#!/bin/bash
cd Documents/node_bot/
node fog1.js

如果您希望节点应用程序在特定时间 运行 特定代码段,您可以 运行 一个 setTimeout() 递归 "loop" 来检查时间几毫秒。如果特定时间尚未过去,setTimeout() 回调将调用自身并重新开始该过程。但是,如果时间到了,则执行特定代码块并停止递归循环。

const triggerTime = new Date(2019, 05, 05, 02, 30, 0, 0)

function otherCodeToRun() {
  // do something...
}

function wait() {
  setTimeout(function() {
    const currentTime = new Date()

    if (currentTime >= triggerTime) {
      otherCodeToRun() // not calling wait ends the recursive loop
    } else {
      wait() // recursively call wait after the timeout completes
    }
  }, 1000) // wait 1 second
}

理论上,otherCodeToRun() 函数可以调用另一个节点进程来 运行 您的其他文件,或者它可以将您的其他文件作为模块加载,然后 运行 这样。

另外值得注意的是,您可以在 while 循环中执行此检查,但是,应用程序将完全阻塞,这意味着它看起来没有响应并且可能占用大量 CPU 周期. setTimeout 方法让您的应用程序有机会屈服于其他进程,允许您将输出记录到控制台,例如,如果您想要显示倒计时。

它应该看起来更像这样(绝对路径以防万一):

20 14 2 5 * cd /path/to/Documents/node_bot && /path/to/node fog1.js

这将于 5 月 2 日在 14:20

运行