PHP cron中的批处理
大型的连锁店有一个大问题。每天,在每家商店会发生数千次交易。公司执行官希望对这些数据进行挖掘。哪些产品卖得好?哪些不好?有机产品在哪里卖得好?冰淇淋的销售情况怎么样?
为了捕捉这些数据,组织必须将所有事务性数据装载进一个数据模型,以便更适合生成公司所需的报告类型。但是,这很花费时间,而且随着连锁规模的增长,处理一天的数据可能要花费一天以上的时间。因此,这是个大问题。
现在,您的 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 脚本)。
相关推荐
-
linux下使用crontab实现定时PHP计划任务失败的原因分析
很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本文就linux下使用crontab实现定时PHP计划任务失败的原因做一分析. 一般我们linux定时执行php代码例如: */5 * * * * /usr/local/php/bin/php /home/wwwroot/1.php 其实这样是可以执行php代码的. 但是为什么很多朋友在1.php写的生成一个缓存文件没有生成呢? 这个要涉及到crontab执行php的相对路径问题. 注意在执行文件中,有包含文件
-
linux使用crontab实现PHP执行计划定时任务
首先说说cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 crontab 工具来配置 cron 任务.所有用户定义的 crontab 都被保存在/var/spool/cron 目录中,并使用创建它们的用户身份来执行.要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -e 命令来编辑该用户的 crontab.该文件使用的格式和 /etc/crontab 相同.当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名
-
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
本文实例讲述了PHP针对常规模板引擎中与CSS/JSON冲突的解决方法,有一定的实用价值,具体分析如下: 本文主要针对对象为Smarty与Dwoo 在Smarty中经常会出现和CSS/JS的语法存在冲突的情况,因为二者都需要使用大括号{}.虽然可以改Smarty的界定符,但你在一个现存系统中,去修改所有相关代码,是不划算的.解决方法如下: 1. 避免同时出现 通过外部引用的方式避免.问题是避无所避.所以这种情况只适合少量简单的情况. 2. 修改Smarty界定符 3.可以使用Smarty的lit
-
解析crontab php自动运行的方法
crontab是linux自带的一个命令 使php自动运行的方法php自动运行有很多方法,这里分以下DZ以及一些通过系统完成的方法和直接触发运行驻留系统的方法.Discuz后台有个计划任务,可以使php自动运行.DZ计划任务的机制是这样:1.首先在到了触发计划任务的时间,有访问(会员,游客,搜索引擎的蜘蛛)然后触发该计划任务发生.(因为PHP是触发是语言,没有人去访问他,他什么也做不了.)2. 计划任务执行.3. 执行成功,返回执行成功的信息,更新到数据库中记录当前执行的时间,下一次需要执行的
-
如何使用Linux的Crontab定时执行PHP脚本的方法
下面介绍Crontab的两种方法. 一.在Crontab中使用PHP执行脚本 就像在Crontab中调用普通的shell脚本一样(具体Crontab用法),使用PHP程序来调用PHP脚本. 每一小时执行myscript.php如下: 复制代码 代码如下: # crontab -e 00 * * * * /usr/local/bin/php /home/john/myscript.php /usr/local/bin/php为PHP程序的路径. 二.在Crontab中使用URL执行脚本 如果你的P
-
php版本的cron定时任务执行器使用实例
本文实例讲述了php版本的cron定时任务执行器使用方法,是非常实用的一个功能应用.具体方法如下: 由于服务器crontab只能精确到分钟,因此程序的起点也是分钟. 该功能一共包括三个部分: 一.配置文件: 配置文件是用来返回要执行的定时任务文件,注意一下*的使用就行了,有两个模式,就是 Y-m-d H:i :年 月 日 时 分 N H:i :星期(1 - 7|周一 - 周日) 时 分 配置文件croning.php如下: /** * 任务管理器配置文件 *
-
PHP框架Swoole定时器Timer特性分析
本文所述PHP框架Swoole定时器Timer特性分析具有很好的实用价值,值得PHP程序开发人员学习借鉴.具体分析如下: 首先,在各种业务型系统中,往往需要服务器在后台扫描相关数据,触发相应的统计.通知等操作. 比如对于一个项目管理系统,需要每天的特定时间内,统计每项任务的执行.到期情况.整个项目的进度等等,根据统计情况,做相应通知处理: 这样一个场景,如何编程实现? 用一般的编程方式,是无法实现自动触发与统计的.当然,简单的思路,是利于系统的cron job机制.但这种方式,对于配置及可靠性方
-
linux实现php定时执行cron任务详解
对于PHP本身并没有一套解决方案来执行定时任务,不过是借助sleep函数完成的.这种方就是要提前做一些配置,如实现过程: 复制代码 代码如下: ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行. set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去 $interval=60*30;// 每隔半小时运行 do{ //这里是你要执行的代码 sleep($inter
-
php解析json数据实例
本文以实例形式展示了php解析json数据的方法,这是一个比较实用的功能,分享给大家供大家参考.具体代码如下: <?php $data; $data.= "["; for ($i = 0; $i < 20; $i++) { $data.= "{"; $data.= "\"id\":\"" . 110 . "\","; $data.= "\"name\&qu
-
PHP cron中的批处理
大型的连锁店有一个大问题.每天,在每家商店会发生数千次交易.公司执行官希望对这些数据进行挖掘.哪些产品卖得好?哪些不好?有机产品在哪里卖得好?冰淇淋的销售情况怎么样? 为了捕捉这些数据,组织必须将所有事务性数据装载进一个数据模型,以便更适合生成公司所需的报告类型.但是,这很花费时间,而且随着连锁规模的增长,处理一天的数据可能要花费一天以上的时间.因此,这是个大问题. 现在,您的 Web 应用程序可能不需要处理这么多数据,但是任何站点的处理时间都有可能超过客户愿意等待的时间.一般来说,客户愿意等待
-
PHP 中的批处理的实现
如果 Web 应用程序中的一个特性需要超过 1 秒或 2 秒才能完成,那么应该怎么办?需要某种离线处理解决方案.学习几种对 PHP 应用程序中长时间运行的作业进行离线服务的方法. 大型的连锁店有一个大问题.每天,在每家商店会发生数千次交易.公司执行官希望对这些数据进行挖掘.哪些产品卖得好?哪些不好?有机产品在哪里卖得好?冰淇淋的销售情况怎么样? 为了捕捉这些数据,组织必须将所有事务性数据装载进一个数据模型,以便更适合生成公司所需的报告类型.但是,这很花费时间,而且随着连锁规模的增长,处理一天的数
-
详解JavaScript 中的批处理和缓存
场景 最近在生产环境遇到了下面这样一个场景: 后台在字典表中存储了一些之前需要前后端共同维护的枚举值,并提供根据 type/id 获取字典的 API.所以在渲染列表的时候,有很多列表的字段直接就是字典的 id,而没有经过后台的数据拼装. 起初,吾辈解决问题的流程如下 确定字典字段,添加转换后的对象类型接口 将对象列表进行转换得到其中字典字段的所有值 对字典 id 列表进行去重 根据 id 列表从后台获取到所有的字典数据 将获得的字典数据转换为 id => 字典 的 Map 遍历最初的列表,对里面
-
windows中dos批处理之命令特殊符号通配符与转义符(推荐)
目录 常用特殊符号 通配符(?和*) 转义符 对批处理中常用符号的详细解 1.@ 2.%.%% 3.: 和 :: 4.~ 5.>.>> 6.| 7.^ 8.& 9.&&.|| 10.() 11.+.-.*./ 12.equ.neq.lss.leq.gtr.geq 文章进行重新排版,并做了部分补充.所有命令均在win7 x64 中文旗舰版上进行测试. 常用特殊符号 @命令行回显屏蔽符 %批处理变量引导符 > 重定向符 > > 重定向符 <.&
-
Java中批处理框架spring batch详细介绍
spring batch简介 spring batch是spring提供的一个数据处理框架.企业域中的许多应用程序需要批量处理才能在关键任务环境中执行业务操作. 这些业务运营包括: 无需用户交互即可最有效地处理大量信息的自动化,复杂处理. 这些操作通常包括基于时间的事件(例如月末计算,通知或通信). 在非常大的数据集中重复处理复杂业务规则的定期应用(例如,保险利益确定或费率调整). 集成从内部和外部系统接收的信息,这些信息通常需要以事务方式格式化,验证和处理到记录系统中. 批处理用于每天为企业处
-
Unity中的静态批处理和动态批处理操作
前言 Unity在运行时可以将一些物体进行合并,从而用一个绘制调用来渲染他们.这一操作,我们称之为"批处理",能得到越好的渲染性能. Unity中内建的批处理机制所达到的效果要明显强于使用几何建模工具的批处理效果,因为,Unity引擎的批处理操作是在物体的可视裁剪操作之后进行的,处理的几何信息少很多. 材质 只有拥有相同材质的物体才可以进行批处理,因此,你需在程序中尽可能多地复用材质.如果你的两个材质仅仅是纹理不同,那么你可通过纹理拼合来将这两张纹理拼合成一张大的纹理,这样,你就可以使
-
批处理经典入门教程!(从不懂到高手)第1/5页
我们补充说明:批处理相对来说是比较简单的语言,大家可以通过多写多看别人的实例来学习,不懂的百度一下. 这是一篇技术教程,真心诚意会用很简单的文字表达清楚自己的意思,只要你识字就能看懂,就能学到知识.写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人.一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到了眼前.. 先概述一下批处理是个什么东东.批处理的定义,至今我
-
学会批处理,用心学很容易!另一不错的见解第1/3页
这是一篇技术教程,真心诚意会用很简单的文字表达清楚自己的意思,只要你识字就能看懂,就能学到知识.写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人.一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到了眼前.. 先概述一下批处理是个什么东东.批处理的定义,至今我也没能给出一个合适的----众多高手们也都没给出----反正我不知道----看了我也不一定信服----
-
可以使用的批处理参数集合
可以在批处理文件内的任何地方使用批处理参数,以提取有关环境设置的信息. Cmd.exe 提供批处理参数扩展变量(%0 到 %9).当在批处理文件中使用批处理参数时,%0 将由批处理文件名替换,而 %1 到 %9 将由在命令行键入的相应参数替换.要访问大于 %9 的参数,必须使用 shift 命令.有关 Shift 命令的详细信息,请参阅 Shift.%* 批处理参数是所有参数(不包括 %0)可引用的通配符,这些参数传递到批处理文件中. 例如,要将 Folder1 中的内容复制到 Folder2,
-
推荐一篇批处理最完整人性化教程第1/3页
这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字就能看懂,就能学到知识.写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人.一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到了眼前. 先概述一下批处理是个什么东东.批处理的定义,至今我也没能给出一个合适的----众多高手们也都没给出----反正我不知道----看了我也不一定信服----我是个菜
随机推荐
- 2个比较经典的PHP加密解密函数分享
- js给网页加上背景音乐及选择音效的方法
- go语言操作redis连接池的方法
- 正则表达式查找相似单词的方法
- Docker为网络bridge模式指定容器ip的方法
- iOS之点击通知栏的通知进入程序的触发事件
- OpenStack Keystone的基本概念详细介绍
- javascript setTimeout和setInterval计时的区别详解
- 用srcElement实现添加效果 原创
- 几个学习PHP的网址
- 在Android中创建菜单项Menu以及获取手机分辨率的解决方法
- 推荐个Css的filter常用滤波器属性及语句大全
- 用js获取元素属性的代码
- Nodejs+Socket.io实现通讯实例代码
- java 重载(overload)与重写(override)详解及实例
- java获取客服端信息的方法(系统,浏览器等)
- 剖析设计模式编程中C#对于组合模式的运用
- Android开发中调用系统相册上传图片到服务器OPPO等部分手机上出现短暂的显示桌面问题的解决方法
- AndroidStudio项目打包成jar的简单方法
- 解决android关于打开虚拟机时右侧工具栏不显示的问题