博主在之前写过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自动执行的应用。
先上一段代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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开发,那就更加强大了。
________________
https://www.cojz8.com/index.php/article/48