PHP 和计划任务 [英] PHP and scheduled tasks

查看:59
本文介绍了PHP 和计划任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试列出在 PHP 上运行计划任务的不同方法.我的目的是提供一种在 PHP 中运行计划任务的通用方法.到目前为止,我有:

I'm trying to come up with a list of different approaches to run scheduled tasks on PHP. My intention is to provide an universal way to run scheduled tasks in PHP. So far I have:

1) 分析网站流量.如果您每天收到 770 次点击(即每 2 分钟一次点击),并且您计划在上午 6:00 运行任务,而访问者在上午 5:59 请求页面,则运行该任务,因为下一位访问者将平均在早上 6:01 到达.在这种情况下运行 = exec('/usr/bin/php -f/home/account/cron.php').

(+) 只要路径正确,就可以在所有平台上工作.

(+) Works on all platforms as long as the paths are correct.

(-) 需要一定的 CPU 能力.

(-) Requires some CPU power.

(-) 需要 exec().

(-) Requires exec().

(-) 在较小的网站或流量高峰期的网站上不准确.

(-) Is not accurate on smaller sites or on sites with huge traffic spikes.

2) 上述的改进版本.当用户请求页面并且任务要运行时,不要使用 exec(),而是在将内容刷新给用户后使用 include().

(+) 适用于所有平台.

(+) Works on all platforms.

(+) 没有 exec().

(+) No exec()'s.

(-) 需要一定的 CPU 能力.

(-) Requires some CPU power.

(-) 在较小的网站或流量高峰期的网站上不准确.

(-) Is not accurate on smaller sites or on sites with huge traffic spikes.

3) 运行一个单独的进程后台,使其在一个恒定循环中运行.提供一个管理界面,让您开始"和结束"服务".然后它将使用 fsockopen() 调用无限运行的 .php 脚本.它使用 sleep() 来不消耗资源并在适当的时候唤醒(参见:time_sleep_until()).它可以搜索文件并读取它们以了解何时运行哪些任务.可以创建文件run-everyday-3.00am",让调度程序运行其中的代码.

(+) 适用于所有平台.

(+) Works on all platforms.

(+) 没有 exec().

(+) No exec()'s.

(+) 可以非常准确(例如,如果它每分钟睡眠一次).

(+) Can be quite accurate (e.g. if it sleeps per a minute basis).

(-) 不稳定 - 服务器崩溃完全停止调度程序.

(-) Is not stable - a server crash stops the scheduler entirely.

(-) 一些主机不喜欢一个进程运行 24/7/365 = 资源猪?

(-) Some hosts don't like to have a process running 24/7/365 = resource hog?

4) 直接在 Linux 等上运行 exec('crontab').

(+) 它不是资源猪.

(+) It is not a resource hog.

(+) 是准确的.

(-) exec().

(-) exec().

(-) 不适用于所有平台.

(-) Does not work on all platforms.

5) 请求 cPanel 凭据并向其发送 POST 以创建/管理/删除 crons.

(+) 准确

(+) 它不是资源猪.

(+) It is not a resource hog.

(-) 不利于安全

(-) 需要用户详细信息 = 降低可用性

(-) Requires user details = decreased usability

(-) 不适用于所有平台(需要无法在 Windows 上运行的 cPanel).

(-) Does not work on all platforms (requires cPanel which does not work on Windows).

(-) 需要 cPanel.

(-) Requires cPanel.

还有其他想法吗?

推荐答案

您建议的几乎所有方法都很丑陋,尽管大多数方法都行得通.

Almost all of the methods that you suggested are ugly, even though most will work.

我丑陋的选择是在具有互联网连接的本地机器上设置 cron,每隔几分钟运行一次 curl 命令.

My ugly alternative is to set up cron on a local machine with internet connectivity that runs a curl command ever few minutes.

它和你所有的解决方案一样丑陋,但它更可靠一些.

It's just as ugly as all of your solutions, but it is slightly more reliable.

这篇关于PHP 和计划任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆