PHP cron中的批处理


Posted in PHP onSeptember 16, 2008

大型的连锁店有一个大问题。每天,在每家商店会发生数千次交易。公司执行官希望对这些数据进行挖掘。哪些产品卖得好?哪些不好?有机产品在哪里卖得好?冰淇淋的销售情况怎么样?
为了捕捉这些数据,组织必须将所有事务性数据装载进一个数据模型,以便更适合生成公司所需的报告类型。但是,这很花费时间,而且随着连锁规模的增长,处理一天的数据可能要花费一天以上的时间。因此,这是个大问题。
现在,您的 Web 应用程序可能不需要处理这么多数据,但是任何站点的处理时间都有可能超过客户愿意等待的时间。一般来说,客户愿意等待的时间是 200 毫秒,如果超过这个时间,客户就会觉得过程 “缓慢”。这个数字基于桌面应用程序,而 Web 使我们更有耐心了。但无论如何,不应该让客户等待的时间超过几秒。所以,要采用一些策略来处理 PHP 中的批处理作业。
分散的方式与 cron
在 UNIX® 机器上,执行批处理的核心程序是 cron 守护进程。这个守护进程读取一个配置文件,这个文件会告诉它要运行哪些命令行以及运行的频率。然后,这个守护进程就按照配置执行它们。在遇到错误时,它甚至能够向指定的电子邮件地址发送错误输出,从而帮助对问题进行调试。
我知道一些工程师强烈主张使用线程技术。“线程!线程才是进行后台处理的真正方法。cron 守护进程太过时了。”
我不这么认为。
这两种方法我都用过,我认为 cron 具备 “Keep It Simple, Stupid(KISS,简单就是美)” 原则的优点。它使后台处理保持简单。不需要编写一直运行的多线程的作业处理应用程序(因此不会有内存泄漏),而是由 cron 启动一个简单的批处理脚本。这个脚本判断是否有作业要处理,执行作业,然后退出。不需要担心内存泄漏。也不需要担心线程停止或陷入无限循环。
那么,cron 是如何工作的?这依赖于您所处的系统环境。我只讨论老式简单的 cron 的 UNIX 命令行版本,您可以向系统管理员咨询如何在自己的 Web 应用程序中实现它。
下面是一个简单的 cron 配置,它在每天晚上 11 点运行一个 PHP 脚本:
0 23 * * * jack /usr/bin/php /users/home/jack/myscript.php

前 5 个字段定义应该启动脚本的时间。然后是应该用来运行这个脚本的用户名。其余的命令是要执行的命令行。时间字段分别是分、小时、月中的日、月和周中的日。下面是几个示例。
命令:
15 * * * * jack /usr/bin/php /users/home/jack/myscript.php

在每个小时的第 15 分钟运行脚本。
命令:
15,45 * * * * jack /usr/bin/php /users/home/jack/myscript.php

在每个小时的第 15 和第 45 分钟运行脚本。
命令:
*/1 3-23 * * * jack /usr/bin/php /users/home/jack/myscript.php

在早上 3 点到晚上 11 点之间的每分钟运行脚本。
命令
30 23 * * 6 jack /usr/bin/php /users/home/jack/myscript.php

在每星期六的晚上 11:30 运行脚本(星期六由 6 指定)。
可以看到,组合的数量是无限的。可以根据需要控制运行脚本的时间。还可以指定多个要运行的脚本,这样的话,一些脚本可以每分钟都运行,而其他脚本(比如备份脚本)可以每天只运行一次。
为了指定将报告的错误发送到哪个电子邮件地址,可以使用 MAILTO 指令,如下所示:
MAILTO=jherr@pobox.com
注意:对于 Microsoft® Windows® 用户,有一个等效的 Scheduled Tasks 系统可以用来定期启动命令行进程(比如 PHP 脚本)。

PHP 相关文章推荐
用PHP开发GUI
Oct 09 PHP
亲密接触PHP之PHP语法学习笔记1
Dec 17 PHP
php empty函数判断mysql表单是否为空
Apr 12 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
如何用C语言编写PHP扩展的详解
Jun 13 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
php实现转换html格式为文本格式的方法
May 16 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
PHP开发实现微信退款功能示例
Nov 25 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
PHP执行系统命令函数实例讲解
Mar 03 PHP
FleaPHP的安全设置方法
Sep 15 #PHP
用PHP调用Oracle存储过程的方法
Sep 12 #PHP
php5新改动之短标记启用方法
Sep 11 #PHP
php5 pdo新改动加载注意事项
Sep 11 #PHP
PHP常用函数小技巧
Sep 11 #PHP
PHP下10件你也许并不了解的事情
Sep 11 #PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 #PHP
You might like
解析dedecms空间迁移步骤详解
2013/05/15 PHP
java script编程起步(第三课)
2007/01/10 Javascript
flash javascript之间的通讯方法小结
2008/12/20 Javascript
jQuery 使用个人心得
2009/02/26 Javascript
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
[03:11]2014DOTA2国际邀请赛-VG掉入败者组 独家专访357
2014/07/19 DOTA
python中from module import * 的一个坑
2014/07/20 Python
Python写的Socks5协议代理服务器
2014/08/06 Python
Python正则表达式使用经典实例
2016/06/21 Python
python运行其他程序的实现方法
2017/07/14 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
灵泰克Java笔试题
2016/01/09 面试题
数控技术专业推荐信
2013/11/01 职场文书
高中学生干部学习的自我评价
2014/02/21 职场文书
大学军训感言200字
2014/02/26 职场文书
小学生母亲节演讲稿
2014/05/07 职场文书
初中教师业务学习材料
2014/05/12 职场文书
2014年安全生产责任书
2014/07/22 职场文书
个人总结格式范文
2015/03/09 职场文书
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android