Нужно ли мне, чтобы мой скрипт работал, чтобы node-cron выполнял запланированные задачи? - PullRequest
0 голосов
/ 04 августа 2020

Я создаю веб-парсер, и я новичок в этом. Что он делает, так это то, что он очищает цены Amazon для 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)

1 Ответ

0 голосов
/ 04 августа 2020

Да, логика c Crons заключается в том, что какой-то процесс-демон будет следить за временем и запускать какую-то задачу. поскольку вы используете node-cron , вам нужно, чтобы этот фрагмент кода работал, он запускает ваш AmazonTracker. js,

в идеале следует go с системами Cron, что является более надежен и подвержен сбоям из-за выключения системы и т. д. c.

проверьте ниже (это один из примеров) https://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

...