如何设置PHP工作者

时间:2011-05-15 05:41:17

标签: php

我们正在编写一个PHP脚本,它通过RESTful API调用创建虚拟机。那部分很容易。一旦创建VM的请求被发送到服务器,API请求基本上返回“机器排队等待创建...”。当我们创建虚拟机时,我们基本上使用VM标签和DATE-CREATED-STARTED将记录插入到MySQL数据库中。该记录还有一个DATE-CREATED-FINISHED字段,该字段为NULL。

LABEL           DATE-CREATED-STARTED       DATE-CREATED-FINISHED
test-vm-1       2011-05-14 12:00:00        NULL

所以这是我们的问题。我们如何在初始请求上基本上旋转/生成PHP工作器,每隔10秒检查一次排队虚拟机的状态,当虚拟机启动并运行时,更新DATE-CREATED-FINISHED。请记住,初始API请求会立即返回“要创建的计算机队列”。然后退出。 PHP工作人员需要在后台进行10秒检查。

3 个答案:

答案 0 :(得分:1)

创建虚拟机后,您的服务器是否可以不激活请求?

例如

  1. PHP脚本通过您的API请求服务器创建新VM。
  2. PHP脚本记录开始时间和退出。服务器上的队列中的VM等待创建。
  3. 服务器最终创建VM并调用更新表php脚本。
  4. 这样你就没有轮询,没有cron脚本,没有后台线程。等等,但只有你的系统可以这样工作。否则,我会考虑设置@dqhendricks提到的cron脚本,或者如果可能的话,设置@Savas Alp提到的后台脚本。

答案 1 :(得分:0)

如果您的托管允许,请创建一个PHP CLI program并在后台执行它,如下所示。

<?php
while (true)
{
  sleep(10);

  // Do the checks etc.
}
?>

按以下命令运行:

php background.php & // Assuming you're using Linux

如果您的托管不允许运行后台作业,您必须利用每个机会进行此检查;喜欢在每个PHP页面请求的开头做它。为了帮助实现这一点,在创建虚拟机之后,生成的页面可能每10秒刷新一次!

答案 2 :(得分:0)

作为变体,您可以使用Tasks模块,并且有任务代码示例:

class VMCheck extends \Tasks\Task
{
    protected $vm_name;

    public function add($vm_name)
    {
        $this->getStorage()->store(__CLASS__, $vm_name, true);
    }

    public function execute()
    {
        do
        {
            $check = CheckAPI_call($vm_name); //your checking code here
            sleep(10);
        }
        while (empty($check));
    }

    public function restore($data)
    {
        $this->vm_name = $data;
    }
}