PHP定时任务实现(计划任务 vs node.js)

PHP自动任务(单线程)

一、计划任务实现 :最终需要在服务器(windows)上 设置计划任务

1、写好php任务文件 auto.php:链接数据库 判断条件操作数据库

2、创建bat文件 例:run.bat

文件中写入     "D:phpStudyWWWkawadai odejsphpphp.exe"  -f  "D:phpStudyWWWkawadaiauto.php"

前者是php.exe 路径 后者是php任务文件路径

3、创建计划任务

  1. 首先我们打开开始菜单,然后在搜索框中输入计划任务这几个字

  2.  回车确定之后,就会弹出计划任务的设置面板,
     
  3.  我们点击创建基本任务选项,,
     
  4.  然后输入任务名和描述,并点击下一步按钮,
     
  5.  选择任务提醒频率为每天,然后点击下一步
  6. 然后设置时间,如图:
 计划任务可再次修改编辑,可自行设置

 二、node.js实现 

1、 安装node.js 及相关配置环境

下载地址 : http://nodejs.cn/

npm安装Node.js时会一起安装,npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西

利用npm.cmd安装 所需模块 例: mqsql node-schedule jquery express

将安装好的环境包以及模块 一起复制 入php 项目根目录中

2、写好php任务文件 auto.php:链接数据库 判断条件操作数据库,该文件可放入 上述nodejs 文件夹

3、创建js文件 auto.js :该文件也可放于上述nodejs文件夹 

node.js创建定时任务  执行cmd命令  cmd其实是执行php文件    :  php.exe路径  php文件路径

定时时间设置 

1. 确定的时间执行

比如: 2016年7月13日15:50:00 , new Date() 的时候月份要减1.
[javascript] view plain copy
 
  1. var date = new Date(2016,6,13,15,50,0);  
  2. schedule.scheduleJob(date, function(){  
  3.   httpGet();  
  4. });  
运行结果:

2. 秒为单位执行

比如:每5秒执行一次
[javascript] view plain copy
 
  1. var rule1     = new schedule.RecurrenceRule();  
  2. var times1    = [1,6,11,16,21,26,31,36,41,46,51,56];  
  3. rule1.second  = times1;  
  4. schedule.scheduleJob(rule1, function(){  
  5.   httpGet();  
  6. });  
运行结果:


3.以分为单位执行

比如:每5分种执行一次
[javascript] view plain copy
 
  1. var rule2     = new schedule.RecurrenceRule();  
  2. var times2    = [1,6,11,16,21,26,31,36,41,46,51,56];  
  3. rule2.minute  = times2;  
  4. schedule.scheduleJob(rule2, function(){  
  5.   httpGet();  
  6. });  
运行结果:

有500尴尬请忽略,不小心把数据库关掉了.

4.以小时为单位执行

比如:每4小时执行一次
[javascript] view plain copy
 
  1. var rule3     = new schedule.RecurrenceRule();  
  2. var times3    = [1,5,9,13,17,21];  
  3. rule3.hour  = times3;  
  4. schedule.scheduleJob(rule3, function(){  
  5.   httpGet();  
  6. });  

以小时的就不贴运行结果了.时间太久

5.Cron风格

[javascript] view plain copy
 
  1. schedule.scheduleJob('5 * * * * *', function(){  
  2.   httpGet();  
  3. });  
这个代码的意思就是每分钟的5秒这个点执行

图中注释定时器部分 是每秒执行 未注释部分是 每五秒执行

4、创建bat文件 同样放于nodejs文件夹  内容:

手动点击即可执行 auto.js 进而定时执行 auto.php文件 完成自动定时任务

原文地址:https://www.cnblogs.com/yimingwang/p/7486451.html