NodeJs 在Cron自动执行的应用

    博主在之前写过PHP自动执行任务【PHP自动执行代码 CRON】中写过,基于业务的任务自动执行,不管怎么说在Windos环境下还是普遍很难做到任务的定时,定点进行自动执行。

    今天就来说说使用NodeJs+Thinkphp完成各种自动化任务。

    简单介绍下NodeJs:Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。

    目前NodeJs在各大代码托管平台,基本上也是名列前茅。

    首先,你要安装下nodejs,安装方法很简单,这里就不做赘述了,安装完后,由于使用的是CMD命令,所以建议安装下GIT,可能个人比较习惯使用GIT来写命令。

     安装的事情,这里就不再多做描述了,直接进入今天的主题NodeJs 在Cron自动执行的应用。


     先上一段代码:

    var request = require('request'),
	schedule = require('node-schedule'),
	schedule.scheduleJob('30 * * * * *', function(){
		 console.log('---------------------'+ new Date() +'------------------------');
        }); 
    //解释下,上面这段代码执行,那么系统会每遇到每分钟的30秒,都会触发一次
    *  *  *  *  *  *
        ┬ ┬ ┬ ┬ ┬ ┬
        │ │ │ │ │  |
        │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
        │ │ │ │ └───── month (1 - 12)
        │ │ │ └────────── day of month (1 - 31)
        │ │ └─────────────── hour (0 - 23)
        │ └──────────────────── minute (0 - 59)
        └───────────────────────── second (0 - 59, OPTIONAL)	

    我们使用了非常著名的schedule来作为今天的主角,schedule还有很多种用法,如下:

        1:指定时间执行       
            var schedule = require("node-schedule");
            var date = new Date(2018,9,14,15,40,0);
            var j = schedule.scheduleJob(date, function(){
            console.log('----------------------'+ new Date() +'-------------------------');
          });
            取消任务
            j.cancel();
         
        2:每小时固定时间
          var rule = new schedule.RecurrenceRule();
          rule.minute = 30;
          var j = schedule.scheduleJob(rule, function(){
            console.log('----------------------'+ new Date() +'------------------------');
          });
        3:某些时间执行
          var rule = new schedule.RecurrenceRule();
          rule.dayOfWeek = [0, new schedule.Range(1, 7)];
          rule.hour = 20;
          rule.minute = 0;
          var j = schedule.scheduleJob(rule, function(){
            console.log('---------------------'+ new Date() +'------------------------');
          });
         4:每秒执行
          var rule = new schedule.RecurrenceRule();
          var times = [];
          for(var i=1; i<60; i++){
            times.push(i);
          }
          rule.second = times;
          var c=0;
          var j = schedule.scheduleJob(rule, function(){
                c++;
                console.log(c);
          });

    相信以上的功能足够你进行拓展开发了。

    不过还是远远不够的,之前说了NodeJs基于Cmd命令运行,windows服务器一挂掉,就完了。任务定时就没了,那么怎么解决这个问题。

    博主建议使用NoDeJs 的Pm2这个模块来做守护。

    

        首先需要安装pm2:

        npm install -g pm2

        运行:

        pm2 start app.js

    完成。


以上我们就完成了,Windos下系统自动,定时,任务的操作。当然我们还可以拓展更多,比如集成下Thinkphp5.0的API开发,那就更加强大了。    

逆天的蝈蝈博客
请先登录后发表评论
  • 最新评论
  • 总共1条评论
逆天的蝈蝈博客

p._苯苯猪:不错  值得参考 还需深入研究下 想把它移植 用于 到监控 到 时间 生效  销毁  执行PHP 方法 等相关功能 

2020-03-12 10:20:02 回复