继续转 [转]php版本的cron定时任务执行器
由于服务器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定时任务执行器相关推荐
- cron定时任务和No MTA installed, discarding output错误处理
陈拓 2021/09/09-2020/09/12 0. 我的系统 lsb_release -a 1. 设置cron 为了定时执行程序启用cron. 我的项目需求为每5分钟执行一次hkCapJpeg1. ...
- @Scheduled cron 定时任务表达式含义用法及* ?的区别
** @Scheduled cron 定时任务表达式含义用法及* ?的区别 ** cron格式:[秒数][分钟][小时][日期][月份][星期几][年份(可省略)] 关于[日期]与[星期几]的说明: ...
- 驰骋工作流引擎Silverlight版本的流程解析执行器-预计在6月份发布
关键字: Silverlight 驰骋工作流引擎 流程解析执行器 关于silverlight 版本的流程解析执行器的问题 编写人: ccflow 发布日期: 2013/5/20 1, 为什么要开发Si ...
- window下配置定时任务实现类似linux的cron定时任务
2019独角兽企业重金招聘Python工程师标准>>> 需求分析: 由于在window本地我已经塔建好爬中代码,不想上传到服务器直接在本地一直爬取就好,所以需要在window下新建定 ...
- ubuntu cron 定时任务
1.如何查看Ubuntu 的 crontab的执行日志: 执行sudo vim /etc/rsyslog.d/50-default.conf 将cron.* /var/log/cron.log 中cr ...
- cron定时任务详解
crond是什么? crond 和crontab是不可分割的.crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于 ...
- linux内置的cron定时任务
linux内置的cron进程能帮我们实现这些需求,cron搭配shell脚本,非常复杂的指令也没有问题. cron介绍 我们经常使用的是crontab命令是cron table的简写,它是cron的配 ...
- Go Gin 系列十一:Cron定时任务
知识点 完成定时任务的功能 本文目标 在实际的应用项目中,定时任务的使用是很常见的.你是否有过 Golang 如何做定时任务的疑问,莫非是轮询,在本文中我们将结合我们的项目讲述 Cron. 介绍 我们 ...
- Linux服务器定时清理日志文件、Linux cron定时任务
文章目录 1. 准备工作 2. 脚本实现 2.1 执行命令准备 2.2.Linux 下创建定时任务-crontab 2.2.1.crontab 常用命令 2.2.2 命令行操作 3.附甜点 cron校 ...
最新文章
- matlab 弹出提示,谁能告诉我为什么一打开matlab2014b就弹出一个框就自动退出
- 华夫饼为什么不松软_用了3年的华夫饼配方,掌握这个配比,外酥里软超,比蛋糕好吃...
- C++中int id[sizeof(unsigned long)]的语句,正确吗?
- java+cache使用方法_java相关:Spring boot redis cache的key的使用方法
- 利用Linq在RadCombobox中输出分类后的数据
- 136. 只出现一次的数字 golang
- python 拟牛顿法 求非线性方程_C语言实现迭代法求非线性方程的根
- C/C++网络编程工作笔记0004---socket()函数详解
- JAVA中MD5加密实现
- springboot 微服务_Spring Boot在微服务中的最佳实践
- 世界第一台电脑_研发世界第一台电脑的核心人物,被美国隐瞒35年,只因他是个华人...
- append追加的html中富文本失效,jquery append 动态添加的元素事件on 不起作用的解决方案...
- 更改IntelliJ IDEA的Java编译器版本
- OK插件安装常见问题集锦(PowerPoint版)|OneKeyTools Lite安装说明
- java多级部门数据权限设计_数据权限设计(转载)
- 流量分析 seo alexa 排名
- Blue Coat:2015年数据安全趋势七大预测
- PB编程常用API函数
- dw01均衡电路_DW01内部原理图
- word打开出错,要进入安全模式问题
热门文章
- 【面试必备】java实现下载文件
- 【响应式Web前端设计】CSS3伪类与伪元素的区别
- 机器学习(MACHINE LEARNING)协方差与相关系数
- div中有元素刷新不出来_DNF:神话罐子来了!500个不渝材料就能换,但你刷新不出来...
- from import python3_《Python语言程序设计》 —3.3.2 from import
- 华科与浙大计算机学院,计算机最强14所高校排名,清华第2,浙大第4,南大第6,华科第10...
- xcopy 跳过已经存在的_《天官赐福》舍不得跳过的片头片尾,无别,不散唱出花城心声...
- Hive数据分析——Spark是一种基于rdd(弹性数据集)的内存分布式并行处理框架,比于Hadoop将大量的中间结果写入HDFS,Spark避免了中间结果的持久化...
- java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id null
- 一次业务网关用ASP.NET Core 2.1重构的小结