由于服务器crontab只能精确到分钟,那程序的起点也是分钟。

一共包括但部分:

一、配置文件:

配置文件是用来返回要执行的定时任务文件,注意一下*的使用就行了,有两个模式,就是

Y-m-d H:i        :年 月 日 时 分
N H:i            :星期(1 - 7|周一 - 周日) 时 分

配置文件:croning.php

/*** 任务管理器配置文件* * Y-m-d H:i        :年 月 日 时 分* N H:i            :星期(1 - 7|周一 - 周日) 时 分* * 2013-12-25 19:49 : 固定时间,只执行一次* *-12-25 20:00    : 每年的某月某日 某小时某分* 2013-12-25 *:49  : 某天的每个小时的49分都执行一次* *-*-* 20:00      : 每天晚上8点0分执行* *-*-* *:*        :每分钟都在执行* 2 20:01          :每周二的20:01时间都执行一次* * * 号表示当前位置的任何时间。以此类推....* * 格式:* array(*      key=>value,* );* * 说明:* key是定义的执行时间,value是执行的文件,可以是数组或者字符串,当同一时间有多个任务执行时,为了避免key的覆盖请用一维数组模式。* */
return array('2013-12-25 19:49'=>'123.php','2013-12-* 18:00'=>'456.php','1 08:00'=>'6546.php','*-12-25 19:49'=>array('444.php','456.php')
);

二、服务器cronjob主要执行的php文件:

主要处理与分析哪些文件是当时可以执行的。以及写入执行记录文件。

<?php
/*** cron任务统一执行的文件,没有超时*/
header('Content-Type:text/html; charset=utf-8');
set_time_limit(0);
define('APP_ROOT', dirname(__FILE__));
define('AHA_ROOT', dirname(APP_ROOT));
define('CORE_ROOT', AHA_ROOT . '/__core');
define('DATA_ROOT', AHA_ROOT . '/data');
define('MODEL_ROOT', APP_ROOT . '/model');
define('ONING_ROOT', APP_ROOT . '/oning'); //定时执行文件目录
require CORE_ROOT . '/Common.php';
require CORE_ROOT . '/AHA.php'; //载入框架核心文件
spl_autoload_register(array('Common', 'loadClassFile'));
AHA::initConfig(include APP_ROOT . '/_config/inc.php'); //载入配置文件
//不存在执行的配置文件时
if (!file_exists(APP_ROOT . '/_config/croning.php')) {exit('cron failed,please check the cron config!');
}$__all = include APP_ROOT . '/_config/croning.php';
//数据不合法时
if (!$__all || !is_array($__all)) {exit('cron failed,please check the cron config!');
}$__echo = true; //是否输出到屏幕$__time_star = microtime(true);
$__now = time();Common::fileLog(DATA_ROOT . '/log/cron_index.log', '执行cron开始******************************' . date('Y-m-d H:i:s', $__now) . '******************************', $__echo);$__onFile = array();
if ($__all) {foreach ($__all as $__key => $__value) {if (strpos($__key, '-') === false) {//每周的处理preg_match('@^([\d\*]+) ([\d\*]+):([\d\*]+)$@U', $__key, $match);} else {//正常的处理preg_match('@^([\d\*]+)\-([\d\*]+)\-([\d\*]+) ([\d\*]+):([\d\*]+)$@U', $__key, $match);}if ($match) {array_shift($match);if (__getPreg($match, $__now)) {//是否是要执行的文件$__onFile = array_merge($__onFile, is_array($__value) ? $__value : array($__value));}}}
}
if ($__onFile) {$__onFile = array_unique($__onFile);foreach ($__onFile as $__value) {if (file_exists(ONING_ROOT . '/' . $__value)) {$__time_star2 = microtime(true);Common::fileLog(DATA_ROOT . '/log/cron_index.log', $__value . ' 执行开始----------' . date('Y-m-d H:i:s') . '-----------', $__echo);include ONING_ROOT . '/' . $__value;Common::fileLog(DATA_ROOT . '/log/cron_index.log', $__value . ' 执行结束(花费时间:' . ((microtime(true) - $__time_star2) * 1000) . 'ms)-------------', $__echo);}}
}
Common::fileLog(DATA_ROOT . '/log/cron_index.log', '执行cron结束(一共执行时间:' . ((microtime(true) - $__time_star) * 1000) . 'ms)*************' . date('Y-m-d H:i:s') . '*****************' . "\n\n", $__echo);/*** 处理正则结果并返回该文件是否是当时要执行* @param array $match      正则结果,数组* @param integer $__now    当时时间戳* @return bool*/
function __getPreg($match, $__now) {$back = false;list($__Y, $__m, $__d, $__N, $__H, $__i) = explode('-', date('Y-m-d-N-H-i', $__now));$argc = count($match);if ($argc === 3) {$argc = $match[0] === '*' ? $__N : $match[0];$argc.=' ';$argc.=$match[1] === '*' ? $__H : $match[1];$argc.=':';$argc.=$match[2] === '*' ? $__i : $match[2];$back = date('N H:i', $__now) === date($argc, $__now) ? true : false;} elseif ($argc === 5) {$argc = $match[0] === '*' ? $__Y : $match[0];$argc.='-';$argc.=$match[1] === '*' ? $__m : $match[1];$argc.='-';$argc.=$match[2] === '*' ? $__d : $match[2];$argc.=' ';$argc.=$match[3] === '*' ? $__H : $match[3];$argc.=':';$argc.=$match[4] === '*' ? $__i : $match[4];$back = date('Y-m-d H:i', $__now) === date($argc, $__now) ? true : false;}return $back;
}

三、众多要执行的定时文件:

这个是真正要执行的代码:包括采集,数据整理与分析。。。。,文件路径写到配置文件的value中去。同一时间执行的文件,记得一维数组模式。

来源:http://www.pangyiguang.com/a_76

转载于:https://www.cnblogs.com/x3d/p/3744905.html

继续转 [转]php版本的cron定时任务执行器相关推荐

  1. cron定时任务和No MTA installed, discarding output错误处理

    陈拓 2021/09/09-2020/09/12 0. 我的系统 lsb_release -a 1. 设置cron 为了定时执行程序启用cron. 我的项目需求为每5分钟执行一次hkCapJpeg1. ...

  2. @Scheduled cron 定时任务表达式含义用法及* ?的区别

    ** @Scheduled cron 定时任务表达式含义用法及* ?的区别 ** cron格式:[秒数][分钟][小时][日期][月份][星期几][年份(可省略)] 关于[日期]与[星期几]的说明: ...

  3. 驰骋工作流引擎Silverlight版本的流程解析执行器-预计在6月份发布

    关键字: Silverlight 驰骋工作流引擎 流程解析执行器 关于silverlight 版本的流程解析执行器的问题 编写人: ccflow 发布日期: 2013/5/20 1, 为什么要开发Si ...

  4. window下配置定时任务实现类似linux的cron定时任务

    2019独角兽企业重金招聘Python工程师标准>>> 需求分析: 由于在window本地我已经塔建好爬中代码,不想上传到服务器直接在本地一直爬取就好,所以需要在window下新建定 ...

  5. ubuntu cron 定时任务

    1.如何查看Ubuntu 的 crontab的执行日志: 执行sudo vim /etc/rsyslog.d/50-default.conf 将cron.* /var/log/cron.log 中cr ...

  6. cron定时任务详解

    crond是什么? crond 和crontab是不可分割的.crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于 ...

  7. linux内置的cron定时任务

    linux内置的cron进程能帮我们实现这些需求,cron搭配shell脚本,非常复杂的指令也没有问题. cron介绍 我们经常使用的是crontab命令是cron table的简写,它是cron的配 ...

  8. Go Gin 系列十一:Cron定时任务

    知识点 完成定时任务的功能 本文目标 在实际的应用项目中,定时任务的使用是很常见的.你是否有过 Golang 如何做定时任务的疑问,莫非是轮询,在本文中我们将结合我们的项目讲述 Cron. 介绍 我们 ...

  9. Linux服务器定时清理日志文件、Linux cron定时任务

    文章目录 1. 准备工作 2. 脚本实现 2.1 执行命令准备 2.2.Linux 下创建定时任务-crontab 2.2.1.crontab 常用命令 2.2.2 命令行操作 3.附甜点 cron校 ...

最新文章

  1. matlab 弹出提示,谁能告诉我为什么一打开matlab2014b就弹出一个框就自动退出
  2. 华夫饼为什么不松软_用了3年的华夫饼配方,掌握这个配比,外酥里软超,比蛋糕好吃...
  3. C++中int id[sizeof(unsigned long)]的语句,正确吗?
  4. java+cache使用方法_java相关:Spring boot redis cache的key的使用方法
  5. 利用Linq在RadCombobox中输出分类后的数据
  6. 136. 只出现一次的数字 golang
  7. python 拟牛顿法 求非线性方程_C语言实现迭代法求非线性方程的根
  8. C/C++网络编程工作笔记0004---socket()函数详解
  9. JAVA中MD5加密实现
  10. springboot 微服务_Spring Boot在微服务中的最佳实践
  11. 世界第一台电脑_研发世界第一台电脑的核心人物,被美国隐瞒35年,只因他是个华人...
  12. append追加的html中富文本失效,jquery append 动态添加的元素事件on 不起作用的解决方案...
  13. 更改IntelliJ IDEA的Java编译器版本
  14. OK插件安装常见问题集锦(PowerPoint版)|OneKeyTools Lite安装说明
  15. java多级部门数据权限设计_数据权限设计(转载)
  16. 流量分析 seo alexa 排名
  17. Blue Coat:2015年数据安全趋势七大预测
  18. PB编程常用API函数
  19. dw01均衡电路_DW01内部原理图
  20. word打开出错,要进入安全模式问题

热门文章

  1. 【面试必备】java实现下载文件
  2. 【响应式Web前端设计】CSS3伪类与伪元素的区别
  3. 机器学习(MACHINE LEARNING)协方差与相关系数
  4. div中有元素刷新不出来_DNF:神话罐子来了!500个不渝材料就能换,但你刷新不出来...
  5. from import python3_《Python语言程序设计》 —3.3.2 from import
  6. 华科与浙大计算机学院,计算机最强14所高校排名,清华第2,浙大第4,南大第6,华科第10...
  7. xcopy 跳过已经存在的_《天官赐福》舍不得跳过的片头片尾,无别,不散唱出花城心声...
  8. Hive数据分析——Spark是一种基于rdd(弹性数据集)的内存分布式并行处理框架,比于Hadoop将大量的中间结果写入HDFS,Spark避免了中间结果的持久化...
  9. java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id null
  10. 一次业务网关用ASP.NET Core 2.1重构的小结