linux每10秒执行一次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux每10秒执行一次相关的知识,希望对你有一定的参考价值。

参考技术A test.sh内容如下:

mysql -uroot -p3g2win <<EOF
use public;
update test set num=num+FLOOR(1 + (RAND() * 10));
quit
EOF```

解释:
在学习Linux的过程中,常会看到一些终端命令或者程序中有">/dev/null 2>&1 "出现,由于已经遇到了好几次了,为了理解清楚,不妨花点时间百度或者google一下相关的知识。

0:表示键盘输入(stdin)
1:表示标准输出(stdout),系统默认是1
2:表示错误输出(stderr)

command >/dev/null 2>&1 & == command 1>/dev/null 2>&1 &

1)command:表示shell命令或者为一个可执行程序
2)>:表示重定向到哪里
3)/dev/null:表示Linux的空设备文件
4)2:表示标准错误输出
5)&1:&表示等同于的意思,2>&1,表示2的输出重定向等于于1
6)&:表示后台执行,即这条指令执行在后台运行

1>/dev/null:表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。
2>&1:表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

这条命令的意思就是在后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null文件,也就是清空.
所以可以看出" >/dev/null 2>&1 "常用来避免shell命令或者程序等运行中有内容输出。

使用 Node-Cron 每 10 秒执行一次 Cron 作业

【中文标题】使用 Node-Cron 每 10 秒执行一次 Cron 作业【英文标题】:Cron Job every 10 seconds with Node-Cron 【发布时间】:2015-07-29 12:18:04 【问题描述】:

我使用 Node-Cron 每 10 秒运行一次 cron 作业。但似乎node-cron存在问题。 https://github.com/ncb000gt/node-cron#cron-ranges

我在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));

);

【问题讨论】:

callback 中的值是多少?还有你如何衡量作业的执行时间? Can a cron job run every 'x' seconds的可能重复 【参考方案1】:

这对我有用 -

    cron.schedule("*/10 * * * * *", function() 
      console.log("running a task every 10 second");
    );

希望这对某人有所帮助。

参考 - https://support.acquia.com/hc/en-us/articles/360004224494-Cron-time-string-format

【讨论】:

以上是关于linux每10秒执行一次的主要内容,如果未能解决你的问题,请参考以下文章

Linux怎么设置定时程序每天早8至20点每10秒执行一次

linux crontab & 每隔10秒执行一次

需要每天早上 9 点跑步,并且每 10 秒保持一次跑步

如何每 20 秒执行一次 bash 脚本? ,好用睡眠和循环?

spring 任务调度 9:25 到16点 每10秒执行一次

linux crontab & 每隔10秒执行一次