Как я могу заставить файл js узла запускаться в определенное время в определенное время в Linux? - PullRequest
0 голосов
/ 02 мая 2019

Я уйду на выходные, и мне нужен файл node.js для запуска в определенное время и дату.Я не нашел никакого способа сделать это через javascript, но, видимо, cron работает (я использую Linux).

Я создал файл sh, который запускает файл nod.js и запускал его через cron, но он вообще не запускался.Я не знаю, имеет ли это какое-либо отношение к Puppeteer + Node.js, но ни один скрипт не запускался ...

Я также пытался использовать команду at, но она тоже не работала

Для cron я добавил строку:

20 14 2 5 * ~/.../start.sh

Файл sh был:

#!/bin/bash
cd Documents/node_bot/
node fog1.js

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Вероятно, это должно выглядеть примерно так (абсолютные пути на всякий случай):

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

Это будет 2 мая в 14: 20

0 голосов
/ 03 мая 2019

Если вы хотите, чтобы приложение узла запускало определенный фрагмент кода в определенное время, вы можете запустить 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, однако приложение будет полностью заблокировано, то есть оно будет не отвечать на запросы и можетзанять много циклов процессора.Подход setTimeout дает вашему приложению возможность уступить другим процессам, позволяя вам регистрировать вывод на консоль, например, если вы хотите отобразить обратный отсчет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...