Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用节点Cron每10秒执行一次Cron作业_Node.js_Express_Cron - Fatal编程技术网

Node.js 使用节点Cron每10秒执行一次Cron作业

Node.js 使用节点Cron每10秒执行一次Cron作业,node.js,express,cron,Node.js,Express,Cron,我使用Node Cron每10秒运行一次Cron作业。但节点cron似乎存在问题 我在04:28:34提出请求,但脚本是从4:28:40开始的(应该从04:28:44开始) 我在04:48:58发出请求,但脚本是在04:49:00开始的(应该在04:49:08开始) 我在05:03:45提出请求,但脚本是从05:03:50开始的(应该从04:49:08开始) 下面是我执行此任务的代码 router.post('/secret', function (req, res) { console

我使用Node Cron每10秒运行一次Cron作业。但节点cron似乎存在问题

我在
04:28:34
提出请求,但脚本是从
4:28:40
开始的(应该从
04:28:44
开始)

我在
04:48:58
发出请求,但脚本是在
04:49:00
开始的(应该在
04:49:08
开始)

我在
05:03:45
提出请求,但脚本是从
05:03:50
开始的(应该从
04:49:08
开始)

下面是我执行此任务的代码

router.post('/secret', function (req, res) {
    console.log('Post request!');
    console.log('Start At:' + getUTCDateTime());

    function getUTCDateTime() {

        var date = new Date();
        var dateUTC = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
        var hour = dateUTC.getHours();
        hour = (hour < 10 ? "0" : "") + hour;
        var min = dateUTC.getMinutes();
        min = (min < 10 ? "0" : "") + min;
        var sec = dateUTC.getSeconds();
        sec = (sec < 10 ? "0" : "") + sec;
        var year = dateUTC.getFullYear();
        var month = dateUTC.getMonth() + 1;
        month = (month < 10 ? "0" : "") + month;
        var day = dateUTC.getDate();
        day = (day < 10 ? "0" : "") + day;
        return year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec; // format: 2015-04-10 11:40:50

    }

    function getEndDateTime(startAt, callback) {

        var date = new Date(startAt);
        date.setSeconds(date.getSeconds() + parseInt(callback));
        var sec = date.getSeconds();
        sec = (sec < 10 ? "0" : "") + sec;
        var hour = date.getHours();
        hour = (hour < 10 ? "0" : "") + hour;
        var min = date.getMinutes();
        min = (min < 10 ? "0" : "") + min;
        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        month = (month < 10 ? "0" : "") + month;
        var day = date.getDate();
        day = (day < 10 ? "0" : "") + day;
        return year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec; // format: 2015-04-10 11:40:50

    }

    function getStartDateTime(startAt, callback) {

        var date = new Date(startAt);
        date.setSeconds(date.getSeconds() - parseInt(callback));
        var sec = date.getSeconds();
        sec = (sec < 10 ? "0" : "") + sec;
        var hour = date.getHours();
        hour = (hour < 10 ? "0" : "") + hour;
        var min = date.getMinutes();
        min = (min < 10 ? "0" : "") + min;
        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        month = (month < 10 ? "0" : "") + month;
        var day = date.getDate();
        day = (day < 10 ? "0" : "") + day;
        return year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec; // format: 2015-04-10 11:40:50

    }

    function callBackUrl(url, data){
        var request = require('request');

        request.post(
            url,
            {form: {data: data}},
            function (error, response, body) {
                if (!error && response.statusCode == 200) {
                    console.log(body)
                }
            }
        );

    }

    var startAt = req.body.startAt;
    var callback = req.body.callback;
    var endAt = req.body.endAt; //2015-05-15 11:23:50
    var data = req.body.data;
    if (callback == "" || endAt == "" || data == "")
        res.end('Params cannot be empty: ' + JSON.stringify(req.body));

    if (getUTCDateTime() >= endAt)
        res.end('Param "endAt" is invalid: ' + JSON.stringify(req.body));

    var jsonObject = JSON.parse(data); //to get the JSON object of the string


    var callbackUrl1 = 'http://qa.www.com/index.php/api/default/test/id/1';
    var callbackUrl2 = 'http://qa.www.com/index.php/api/default/test/id/2';
    //cronStartAt = '0 */' + callback + ' * * * *'; // only every 1 minute
    cronStartAt = '*/' + callback + ' * * * * *'; // only every 1 minute
    var nowCount = 0;
    var CronJob = require('cron').CronJob;
    var cron = new CronJob(cronStartAt, function () {
        nowCount++;
        var tmpStartAt = getStartDateTime(getUTCDateTime(), callback);
        var tmpEndAt = getUTCDateTime();
        //var tmpStartAt = getUTCDateTime();
        //var tmpEndAt = getEndDateTime(tmpStartAt, callback);
        //console.log(tmpStartAt + ' ' + tmpEndAt);
        jsonObject.startAt = tmpStartAt;
        jsonObject.endAt = tmpEndAt;
        data = JSON.stringify(jsonObject);

        callBackUrl(callbackUrl1, data);
        if (getUTCDateTime() >= endAt) {
            cron.stop();
            console.log('stopped at: ' + getUTCDateTime());
            console.log('now count: ' + nowCount);
        }
    }, function () {
        /* This function is executed when the job stops */
        // on crone stop another http call with submitted post data
        callBackUrl(callbackUrl2, data);
    }, true, 'America/Los_Angeles');

    cron.start();
    console.log("Post body: %j", req.body);
    res.end('Body: ' + JSON.stringify(req.body));

});
router.post('/secret',函数(req,res){
log('Post request!');
log('Start At:'+getUTCDateTime());
函数getUTCDateTime(){
变量日期=新日期();
var dateUTC=新日期(Date.getUTCFullYear(),Date.getUTCMonth(),Date.getUTCDate(),Date.getUTCHours(),Date.getUTCMinutes(),Date.getUTCSeconds());
var hour=dateUTC.getHours();
小时=(小时<10?:“)+小时;
var min=dateUTC.getMinutes();
最小值=(最小值<10?:“)+min;
var sec=dateUTC.getSeconds();
秒=(秒<10?:“)+秒;
var year=dateUTC.getFullYear();
var month=dateUTC.getMonth()+1;
月=(月<10?:“)+月;
var day=dateUTC.getDate();
日=(日<10?:“)+日;
返回年份+“-”+月份+“-”+天+“+小时+”:“+分钟+”:“+秒;//格式:2015-04-10 11:40:50
}
函数getEndDateTime(startAt,回调){
var日期=新日期(起始日期);
date.setSeconds(date.getSeconds()+parseInt(回调));
var sec=date.getSeconds();
秒=(秒<10?:“)+秒;
var hour=date.getHours();
小时=(小时<10?:“)+小时;
var min=date.getMinutes();
最小值=(最小值<10?:“)+min;
var year=date.getFullYear();
var month=date.getMonth()+1;
月=(月<10?:“)+月;
var day=date.getDate();
日=(日<10?:“)+日;
返回年份+“-”+月份+“-”+天+“+小时+”:“+分钟+”:“+秒;//格式:2015-04-10 11:40:50
}
函数getStartDateTime(startAt,回调){
var日期=新日期(起始日期);
date.setSeconds(date.getSeconds()-parseInt(回调));
var sec=date.getSeconds();
秒=(秒<10?:“)+秒;
var hour=date.getHours();
小时=(小时<10?:“)+小时;
var min=date.getMinutes();
最小值=(最小值<10?:“)+min;
var year=date.getFullYear();
var month=date.getMonth()+1;
月=(月<10?:“)+月;
var day=date.getDate();
日=(日<10?:“)+日;
返回年份+“-”+月份+“-”+天+“+小时+”:“+分钟+”:“+秒;//格式:2015-04-10 11:40:50
}
函数回调url(url、数据){
var请求=要求(“请求”);
请寄(
网址,
{form:{data:data}},
功能(错误、响应、正文){
如果(!error&&response.statusCode==200){
控制台日志(正文)
}
}
);
}
var startAt=req.body.startAt;
var callback=req.body.callback;
var endAt=req.body.endAt;//2015-05-15 11:23:50
var数据=请求主体数据;
如果(回调=“”| |结束=“”| |数据=“”)
res.end('Params不能为空:'+JSON.stringify(req.body));
if(getUTCDateTime()>=endAt)
res.end('Param“endAt”无效:'+JSON.stringify(req.body));
var jsonObject=JSON.parse(data);//获取字符串的JSON对象
var callbackUrl1='1'http://qa.www.com/index.php/api/default/test/id/1';
var callbackUrl2='1!'http://qa.www.com/index.php/api/default/test/id/2';
//cronStartAt='0*/'+回调+'**';//仅每1分钟一次
cronStartAt='*/'+回调+'***';//仅每1分钟一次
var nowCount=0;
var CronJob=require('cron')。CronJob;
var cron=new CronJob(cronStartAt,函数(){
nowCount++;
var tmpStartAt=getStartDateTime(getUTCDateTime(),回调);
var tmpEndAt=getUTCDateTime();
//var tmpStartAt=getUTCDateTime();
//var tmpEndAt=getEndDateTime(tmpStartAt,回调);
//console.log(tmpstarat+''+tmpEndAt);
jsonObject.startAt=tmpstarat;
jsonObject.endAt=tmpEndAt;
data=JSON.stringify(jsonObject);
callBackUrl(callbackUrl1,数据);
if(getUTCDateTime()>=endAt){
cron.stop();
log('停止于:'+getUTCDateTime());
log('now count:'+nowCount);
}
},函数(){
/*此功能在作业停止时执行*/
//在crone上,使用提交的post数据停止另一个http调用
callBackUrl(callbackUrl2,数据);
},没错,“美国/洛杉矶”);
cron.start();
日志(“Post正文:%j”,请求正文);
res.end('Body:'+JSON.stringify(req.Body));
});
这对我很有效-

cron.schedule(“*/10*****”,函数(){
log(“每10秒运行一个任务”);
});
希望这对别人有帮助


参考-

回调中的值是多少?另外,您如何衡量作业何时执行?可能重复的