PHP 中的批处理的实现

2019-04-11 01:14:56刘景俊


命令: 

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 脚本)。

 回页首 


批处理体系结构的基础知识

批处理是相当简单的。在大多数情况下,采用两个工作流之一。第一个工作流用于进行报告;脚本每天运行一次,它生成报告并将报告发送给一组用户。第二个工作流是在响应某种请求时创建的批作业。例如,我登录进 Web 应用程序中,并要求它向系统中注册的所有用户发送一个消息,将一个新的特性告诉他们。这个操作必须进行批处理,因为系统中有 10,000 个用户。PHP 要花费一段时间才能完成这样的任务,所以它必须由浏览器之外的一个作业来执行。

在第二个工作流中,Web 应用程序只需将信息放在某个位置,让批处理应用程序共享它。这些信息指定作业的性质(例如,“Send this e-mail to all the people on the system”。)批处理程序运行这个作业,然后删除作业。另一种方法是,处理程序将作业标为已完成。无论用哪种方法,作业都应该识别为已完成,这样就不会再次运行它。

本文的其余部分演示在 Web 应用程序前端和批处理后端之间共享数据的各种方法。

 回页首 


邮件队列

第一种方法是使用专用的邮件队列系统。在这种模型中,数据库中的一个表包含应该发送给各个用户的电子邮件消息。Web 界面使用 mailouts 类将电子邮件添加到队列中。电子邮件处理程序使用 mailouts 类检索未处理的电子邮件,然后再次使用它从队列中删除未处理的电子邮件。
相关文章 大家在看