Как сделать так, чтобы скрипт node.js перезапускался каждый час? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть скрипт 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 ]

0 голосов
/ 08 октября 2018

Попробуйте 'node-cron': больше на https://www.npmjs.com/package/node-cron Надеюсь, что это работает.

0 голосов
/ 08 октября 2018

Попробуйте использовать 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 или https://stackoverflow.com/a/38062307/436641.

Другой вариант будет node-cron: https://www.npmjs.com/package/node-cron

...