当代码在其他文件中时如何运行 Cron 作业 - Node JS

Posted

技术标签:

【中文标题】当代码在其他文件中时如何运行 Cron 作业 - Node JS【英文标题】:How to Run a Cron Job when the code is in Other File - Node JS 【发布时间】:2022-01-18 23:35:14 【问题描述】:

我正在尝试每 1 小时执行一次 cron。

为此,我在index.js 文件中启动了 cron 作业,如下所示

const cron = require('node-cron');
const readDocuments = require("./cronJobs/readDocuments");
var task = cron.schedule('0 0 */1 * * *', readDocuments);

task.start();

因为要执行的实际代码已经写在./cronJobs/readDocuments 中,并且这个文件中的代码在下面,我正在尝试读取一个 csv 文件。

readDocuments.js

const ResponseManager = require("../common/ResponseManager");

var fs = require('fs');
const csv = require('csv-parser');
console.log('Read Document....')
try 

var filepath = "../files/abc.csv";
fs.createReadStream(filepath)
.on('error', () => 
// handle error
)
.pipe(csv())
.on('data', (row) => 
console.log('rowrowrow',row)
)
.on('end', () => 
// handle end of CSV
)
 catch (error) 
console.log('errorerror',error)
res.status(500).json(ResponseManager(false, error.message));

当我在 cmd 中使用 node index.js 运行节点 js 时,控制台 Read Document.... 正在显示,但其他代码未执行。 它给了我 throw 'execution must be a function'; 错误

我该如何解决这个问题,或者使用 index.js 中的 cron 作业在文件中执行代码的实际过程是什么。

请帮忙。谢谢!!

【问题讨论】:

【参考方案1】:

cron.schedule() 的第二个参数必须是函数。您需要将代码包装成一个函数并从模块中导出。

const ResponseManager = require("../common/ResponseManager");
const fs = require('fs');
const csv = require('csv-parser');

module.exports = function () 
  console.log('Read Document....')
  try 
    const filepath = "../files/abc.csv";
    fs.createReadStream(filepath)
      .on('error', () => 
        // handle error
      )
      .pipe(csv())
      .on('data', (row) => 
        console.log('rowrowrow', row)
      )
      .on('end', () => 
        // handle end of CSV
      );
   catch (error) 
    console.log('errorerror', error)
    res.status(500).json(ResponseManager(false, error.message));
  
;

【讨论】:

【参考方案2】:

您需要导出 cron 函数并在文件中使用它

【讨论】:

以上是关于当代码在其他文件中时如何运行 Cron 作业 - Node JS的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 cron 作业执行(如果它已经在运行)

如何连续运行 inotifywait 并将其作为 cron 或守护进程运行?

如何在 docker 容器中运行 cron 作业

如何创建一个 cron 作业来运行 ruby​​ 脚本?

Wordpress Cron作业未运行

使用控制面板在 cron 作业中运行 PHP 文件