javascript - 如何让node js文件在linux中的某个日期的某个时间运行?

标签 javascript node.js linux puppeteer

我将离开一个周末,我需要一个 node.js 文件在特定时间和日期运行。我还没有找到任何方法可以通过 javascript 做到这一点,但显然 cron 可以工作(我正在运行 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

最佳答案

如果您希望 Node 应用程序在特定时间运行特定代码段,您可以运行 setTimeout() 递归“循环”,每隔几毫秒检查一次时间。如果特定时间尚未过去,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() 函数可以调用另一个 Node 进程来运行您的其他文件,或者它可以将您的其他文件作为模块加载并以这种方式运行。

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

关于javascript - 如何让node js文件在linux中的某个日期的某个时间运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959747/

相关文章:

node.js - 在函数nodejs中从mariadb返回值

c - 页面错误是否会导致 Linux 上的线程上下文切换?

javascript - 尝试在同一个 div 上执行两个 onclick 操作时出错

javascript - 如何使 Bootstrap 模态滑出屏幕?

javascript - 如何在 Node 中找到引用站点 URL?

javascript - 将数据从 express-handlebars 获取到我的 javascript 文件

linux - 转换时区并减去 x 时间量

linux - gnome-terminal:如何关闭原始选项卡?

javascript - 使用 CSS3 向 DIV 添加倾斜背景

javascript - 尝试连接到 Stripe 时我的脚本不会执行