【问题标题】:How to run a PHP script continuously on a virtual host server?如何在虚拟主机服务器上连续运行 PHP 脚本?
【发布时间】:2015-02-05 02:09:06
【问题描述】:

我有一个计划应用程序,它必须根据用户设置的计划执行特定任务。这意味着 PHP 脚本必须不断检查数据库并与当前时间进行比较,看看是否有任何匹配。显然,我不能运行无限循环。

其他选项包括 cron 作业。但是,由于我在虚拟主机服务器上运行所有这些,我不确定是否可以根据 cronjob 安排 PHP 脚本每隔几秒运行一次。我的想法是否正确,还有其他选择吗?或者我可以在虚拟主机上执行 cronjobs(我没有太多的灵活性)?

【问题讨论】:

  • 您要查找的内容称为“chron 作业”-扩展我的答案,这取决于您的主机和运行平台,但如果您需要“每隔几秒钟”运行一些东西,您可以想要重新考虑您当前的系统设置方式,因为这可能会导致负载很重,尤其是在有大量用户的情况下。
  • “显然,我无法运行无限循环” - 为什么不呢?
  • “我可以在虚拟主机上执行 cronjobs”。你问过你的供应商吗?
  • @halfer 谢谢。我会调查的。
  • @halfer 是的,它是共享主机。我没有 root 访问权限。

标签: php database cron


【解决方案1】:

您可以在无限循环中运行 php 脚本,但我不确定这是否真的有意义。

您可以在您的 php 脚本中操作 php 设置来移除最大执行时间。关于 cronjob,我会直接调用 php5 可执行文件来运行您的脚本,并使用一些逻辑来避免双重执行。例如。将当前时间写入锁定文件,因此如果上次时间早于 5 分钟,那么您的脚本已崩溃并且应该立即开始。如果不只是退出。

【讨论】:

    【解决方案2】:

    Cron 可以让你按分钟而不是秒来安排。因此,您的脚本将不得不处理整整一分钟(或更长时间)并在超时后退出,以便让下一个循环(cron 启动的任务)紧随其后。但是,您可能会遇到重叠的问题,因此您的脚本必须首先检查其自身的另一个实例是否已经在运行。

    您可能需要查看:http://kvz.io/blog/2009/01/09/create-daemons-in-php/,了解如何使 PHP 脚本成为守护程序(因此,在后台执行而不依赖 Cron)。

    您是否可以将处理与用户的“插入”操作挂钩? (即,每当有人将工作添加到队列中时)。如果是,您可以使用一个后台进程(守护进程,请参见上面的链接)来侦听 Unix 套接字,并且您的 Add Job 操作将发布到此套接字。这避免了必须从数据库中反复主动轮询以检查是否注册了新作业。

    【讨论】:

    • 感谢您的链接。我认为我的能力可能会受到限制,因为我在虚拟主机上并且我无权安装 Pear 或其他软件包。但我一定会要求的。我不太明白你的最后一段。你能进一步解释一下吗?
    • 在我的最后一段中,我的意思是:您是否可以控制用户将项目添加到日程表的方式?
    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 2011-09-08
    • 2013-06-02
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多