0

我正在构建一个网络爬虫,我是新手。它的作用是抓取用户提供的 URL 的亚马逊价格,然后每当价格低于用户设定的价格时发送电子邮件。我正在使用 SendGrid 发送电子邮件。

但是,我有一个问题。我想将脚本设置为每隔一小时左右自动运行一次,并在发现价格较低时发送电子邮件。在网上研究后,我发现 node-cron 可以帮助我做到这一点,而且确实做到了。但是,它仅在我的脚本在后台运行时才有效。

所以我的主要问题是,要运行脚本并发送电子邮件,我的脚本是否需要一直运行?如果不是我能做什么?

这是我的 cron.js 文件。我还有一个 AmazonTracker.js,其中包含用于跟踪价格和发送电子邮件的代码。

const cron = require('node-cron');
let shell = require('shelljs');

const url = process.argv[2]
// minimum price for which user wants an alert
const minPrice = process.argv[3]

const emailID = process.argv[4];

// scheduled to run every second
cron.schedule("* * * * * *", function() {
  console.log("running");
  if(shell.exec(`node AmazonTracker.js ${url} ${minPrice} ${emailID}`).code !== 0){
    console.log("Something went wrong");
  }
})

此外,在尝试运行某些链接的代码时出现此错误。我的脚本适用于某些链接,并为其他一些链接抛出此错误。如果有人有任何建议。

(node:4284) UnhandledPromiseRejectionWarning: Error: .wait() for #priceblock_dealprice timed out after 30000msec
    at newDone (C:\Users\dtdan\node_modules\nightmare\lib\actions.js:545:9)
    at Timeout._onTimeout (C:\Users\dtdan\node_modules\nightmare\lib\actions.js:578:5)
    at listOnTimeout (internal/timers.js:549:17)
    at processTimers (internal/timers.js:492:7)
4

1 回答 1

0

是的,Crons 背后的逻辑是,一些守护进程将继续查看时间并触发一些任务。由于您使用的是node-cron,因此您需要保持这段代码运行,它将触发您的 AmazonTracker.js,

理想情况下,应该使用系统 Cron,它更可靠,并且由于系统关闭等原因容易出现故障。

检查下面(这是示例之一) https://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

于 2020-08-04T08:27:14.903 回答