#node.js
Вопрос:
Я запускаю файл node js с помощью своего терминала mac. (Запустив командный узел myscript.js на моем терминале).
Сценарий выглядит так, и он предназначен для вызова API.
const api = require('fxme');
const fxmeRest = new api.fxmeRest({
key: '123',
secret: '123',
timeout: 15000,
recvWindow: 10000,
disableBeautification: false,
handleDrift: true
});
var schedule = require('node-schedule');
var j = schedule.scheduleJob('*/30 * * * * ', function(){
console.log('The answer to life, the universe, and everything!');
});
fxmeRest.newOrder({
symbol: 'AUDUSD',
side: 'BUY',
price: '1',
})
.then((data) => {
console.log(data);
})
.catch((err) => {
console.error(err);
});
Он работает нормально, когда я просто печатаю node myscript.js
на своем терминале.
Но потом я захотел запустить его в определенное время. Например, я хочу, чтобы функции вызывались ровно в 01.22 вечера в определенную дату.
Для достижения этой цели я использовал node-расписание. Поэтому я вставил его в начало своего сценария вот так
var schedule = require('node-schedule');
и внес следующее изменение в мой код.
var date = new Date(2022, 03, 23, 01, 22, 0);
var j = schedule.scheduleJob(date, function(){
fxmeRest.newOrder({
symbol: 'AUDUSD',
side: 'BUY',
price: '1',
})
.then((data) => {
console.log(data);
})
.catch((err) => {
console.error(err);
});
});
И запустил его, как и раньше, с помощью моего терминала. Но проблема в том, что скрипт вообще не запускается. (Даже не в указанное время. Что я здесь делаю не так? Любая помощь, которую вы можете оказать, будет весьма признательна.
Ответ №1:
Тебе это не нужно node-schedule
. Я полагаю, что для работы со сценарием его необходимо запускать и запускать непрерывно node-schedule
.
В системах, подобных Un*x (macOS, все линейки и т.д.), Вы можете использовать демон cron, предоставляемый системой.
Запустите man -s 5 crontab
в своем терминале, чтобы узнать, как описать задание в crontab
файле.
Запустите crontab -e
, чтобы отредактировать свой личный кронтаб. Это текстовый файл (изначально пустой), в котором вы можете описать, какие команды запускать и когда. На странице руководства приведено несколько примеров, которые могут вам помочь.
Чтобы запускать свой скрипт каждые 30 минут, вам нужно добавить в файл следующую строку:
*/30 * * * * node myscript.js
Поскольку демон cron работает от имени root, возможно, он не сможет найти node
его на своем пути. Вы можете либо использовать полный путь к node
в приведенной выше команде, либо установить переменную PATH
среды поверх файла crontab.
Используйте type -p node
для поиска пути к node
исполняемому файлу.
Вы также должны задать переменную MAILTO
среды на вкладке crontab перед любым расписанием, чтобы указать адрес электронной почты. Все, что создает ваш скрипт в stdout
и stderr
(включая любые сообщения об ошибках), записывается демоном cron и отправляется по электронной почте на адрес электронной почты, указанный в MAILTO
переменной. Он не отправляет никакого электронного письма, если скрипт не выдает никаких выходных данных.
Если вас не интересуют выходные данные вашего скрипта и вы не хотите получать электронные письма от демона cron (возможно, потому, что скрипт создает некоторые файлы, присутствие и/или содержимое которых можно использовать для получения информации о его результатах), вы можете перенаправлять stdout
/dev/null
и дублировать stdout
stderr
. Добавьте 1>/dev/null 2>amp;1
в командную строку. Или просто добавьте amp;>/dev/null
, это имеет тот же эффект. Введите man bash
свой терминал и прочитайте о перенаправлениях, чтобы узнать больше об этом.