我们正在编写一个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秒检查。
答案 0 :(得分:1)
创建虚拟机后,您的服务器是否可以不激活请求?
例如
这样你就没有轮询,没有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;
}
}