php - 每 10 秒运行 cron 作业 n 次然后停止

标签 php cron

我有一个特殊的情况,我需要查询服务以获取每天特定时间的 n 个用户的信息。问题是,如果我一次执行所有这些操作,将使服务脱机/崩溃。

因此,为了克服这个问题,最好每 10 秒左右为 x 个用户运行一次,直到 x = n,然后停止。

我可以设置 1 个每天运行的 cron 脚本,另一个每 10 秒运行一次。例如,每日脚本会将数据库中的值设置为 1(“开始查询”)(默认值为 0 表示关闭),然后第二个脚本(每 10 秒运行一次)检查该数据库值是否为 1。设置为 true 后,它会迭代一次查询服务 x 个用户的用户,并递增同一数据库表中的另一列以跟踪它在列表中的位置。

这个解决方案的问题(根据我的说法)是每 10 秒运行的第二个脚本必须每次查询数据库以查明“开始查询”设置是否设置为 1。这可能是相当处理器重的。有没有人有更好的解决方案?

注意:代码是用 PHP 编写的 - 由于服务器上 php 脚本的最大执行时间,无法使用 sleep

我同样可以在 python 中执行此操作,cgi 脚本是否有最大执行限制?

最佳答案

为什么不只让一个 cron 脚本每天运行一次,然后每十秒调用另一个脚本,直到另一个脚本说它已完成(例如返回一个值,表示“没有更多需要处理”)?

或者一个每天运行的脚本,只是循环运行用户 block ,让每 X 个用户 sleep()...

请记住,使用 CLI version of PHP 时您不受执行时间限制的限制,并且可以使用标准错误和输出流等与 cron 和其他 shell 脚本很好地交互。

例如,对于第一种方法,您甚至不必使用 PHP 来进行“控制”脚本——一个非常简单的 shell 脚本,它只是循环、调用您的 PHP 脚本,然后休眠并检查“success”返回值(由 PHP 脚本的 exit () 函数返回)就可以了。

关于php - 每 10 秒运行 cron 作业 n 次然后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3913250/

相关文章:

node.js - 如何在 Node 中安排任务在每天上午 9 点运行?

shell - AWS 无法通过 Cronjob 工作

javascript - php脚本的for循环内的onkeyup函数

对象数组上的 PHP usort 函数不起作用

php - 从 imap_open 修剪在电子邮件正文中添加的额外换行符

php - 使用命名空间中的所有类

php - PHP中计划任务的最佳方法是什么

linux - 使用 diff 检查 crontab 更改的脚本

cron - spring 计划任务每​​秒运行一次,使用 cron(0 0/10 * * * ? )

php - Cakephp 和 Mysql 中的 Unicode 字符问题