【问题标题】:How can I make a node js file run on a certain date at a certain time in linux?如何使节点 js 文件在 linux 中的某个时间在某个日期运行?
【发布时间】:2019-09-21 09:45:18
【问题描述】:

我将去一个周末,我需要一个 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

【问题讨论】:

  • 想想你告诉我们的:“我试图运行一个 cron 作业,但没有成功。”现在我们可以假设,Linux 中的 cron 功能通常不会被破坏,所以我认为你是如何做到的会是一个问题 - 告诉我们你做了什么,代码,你在哪里添加了什么 - 然后我们有一个有机会看看你做错了什么。
  • 请说明您尝试触发脚本的时间以及您认为您的 cron 命令在做什么。

标签: javascript node.js linux puppeteer


【解决方案1】:

如果您希望节点应用程序在特定时间运行特定代码段,您可以运行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() 函数可以调用另一个节点进程来运行您的其他文件,或者它可以将您的其他文件作为模块加载并以这种方式运行。

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

【讨论】:

    【解决方案2】:

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

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

    5 月 2 日 14:20 运行

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 2023-03-16
      • 2018-08-04
      • 2013-09-27
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多