Как сделать так, чтобы скрипт node.js перезапускался каждый час?
У меня есть скрипт node.js, который создает подключение через веб-сокет к криптовалютному сайту (bitmex). Он передает данные о ценах.
По какой-то причине через час или два поток становится плохим, а цены (если они вообще идут) становятся неточными.
Сейчас я перезапускаю его вручную каждый час, но мне нужно, чтобы это делалось автоматически. Как я могу это сделать?
Вот код скрипта:
var WebSocket = require('ws');
var ws = new WebSocket("wss://www.bitmex.com/realtime");
var couchbase = require('couchbase')
var cluster = new couchbase.Cluster('couchbase://localhost/');
cluster.authenticate('xxxxxx', 'xxxxxxx');
var bucket = cluster.openBucket('test');
var N1qlQuery = couchbase.N1qlQuery;
let num_msg = 0;
ws.onopen = function(){
ws.send(JSON.stringify({"op": "subscribe", "args": [
"trade:XBTUSD",
"trade:LTCZ18"]
}))
};
ws.onmessage = function(msg){
var response = JSON.parse(msg.data);
num_msg++
if(num_msg > 50) {
var coin = response['data'][0]['symbol'];
var price = response['data'][0]['price'];
//console.log(coin + ":" + price + "\n");
bucket.manager().createPrimaryIndex(
function(){
bucket.upsert( coin,
{
'price': price
},
function (err, result){
});
});
}
};
РЕДАКТИРОВАТЬ: я упустил упомянуть, что в настоящее время я использую систему Windows 7 (хотя мне нужно перейти на Ubuntu или аналогичный).
РЕДАКТИРОВАТЬ 2: Окончательная версия моего кода:)
const cron = require("node-cron");
var WebSocket = require('ws');
var couchbase = require('couchbase');
var dateTime = require('node-datetime');
let now = new Date();
minutes = now.getMinutes() + 1;
if(minutes + 30 > 59) {
minutes1 = minutes - 30;
} else {
minutes1 = minutes - 30;
}
if(minutes > minutes1) {
s_cron = minutes1 + "," + minutes + " * * * *";
} else {
s_cron = minutes + "," + minutes1 + " * * * *";
}
cron.schedule(s_cron, () => {
console.log("---------------------");
console.log("Running Cron Job");
var dt = dateTime.create();
var formatted = dt.format('Y-m-d H:M:S');
console.log(formatted);
// create bitmex ws
var ws = new WebSocket("wss://www.bitmex.com/realtime");
// connect to couchbase
var cluster = new couchbase.Cluster('couchbase://localhost/');
cluster.authenticate('xxxxxxxx', 'xxxxxxxxxx');
var bucket = cluster.openBucket('test');
var N1qlQuery = couchbase.N1qlQuery;
let num_msg = 0;
ws.onopen = function(){
ws.send(JSON.stringify({"op": "subscribe", "args": [
"trade:XBTUSD",
"trade:LTCZ18"]
}))
};
ws.onmessage = function(msg){
var response = JSON.parse(msg.data);
num_msg++
if(num_msg > 50) {
var coin = response['data'][0]['symbol'];
var price = response['data'][0]['price'];
//console.log(coin + ":" + price + "\n");
bucket.manager().createPrimaryIndex(
function(){
bucket.upsert( coin,
{
'price': price
},
function (err, result){
//bucket.disconnect()
});
});
}
};
});
2 ответа
Попробуйте 'node-cron': больше на https://www.npmjs.com/package/node-cron Надеюсь, что это работает.
Рассмотреть возможность использования cron
перезапускать каждый час. Ваш crontab
запись будет выглядеть так:
0 * * * * <command to restart your app>
Если вы не можете или не хотите использовать свою систему crontab
или эквивалент (не уверен, что это будет в Windows), вы можете использовать pm2
,
pm2
: https://www.npmjs.com/package/pm2
Как сделать pm2
перезапуск каждый час, см. https://github.com/Unitech/pm2/issues/1076 или /questions/17438778/kak-zastavit-pm2-perezapustitsya-cherez-opredelennoe-vremya/17438786#17438786.
Другой вариант будет node-cron
: https://www.npmjs.com/package/node-cron