如果第一次执行没有成功,你如何第二次执行脚本?

时间:2012-08-03 19:10:35

标签: php

以下是这个想法:php脚本将发布的数据发送到其他服务器。如果服务器无法获取发布的数据,PHP脚本应该在几分钟后重试。

如果第一次尝试失败,程序员如何在几分钟内再次执行脚本以完成任务?

我想创建一个php脚本,当被新数据通知或数据库插入时,会调用其他服务器并将数据发布到服务器。因此,不涉及HTML / CSS / JS。它完全是命令行 - 在后台运行。那么,如果第一次执行失败怎么办?如何在几分钟内再次重试脚本?

6 个答案:

答案 0 :(得分:2)

请参阅at unix command,以便在等待合适的时间时不需要运行脚本。

echo "php yourscript.php" | at $TIME

如果对其他服务器的调用失败,你可以将它放在php脚本的末尾。

shell_exec('echo "php yourscript.php" | at ' . $moment);

答案 1 :(得分:1)

大多数情况下,如果您需要使用PHP安排脚本,则必须依赖cron,然后使用某种方法来保存与上次脚本执行失败或成功相关的数据(即DB或文本文件)。

但是,如果您有一个运行一次的脚本,并且希望它定期再次尝试直到成功,那么您可以使用带有这样的计时器的while循环:

// allow for long running execution
ignore_user_abort(true);
set_time_limit(0);

$success = false;
while($success === false) {
    // attempt what you are trying to do, set $success to true if it works
    if ($success === true) {
        continue;
    } else {
        sleep(300); // this pauses execution for 300 seconds
    }
}

根据Ross Smith II的建议编辑

答案 2 :(得分:0)

你偶然发现了ajax朋友。

例如:

var x = false;

function ajax()
{
 if(x)
 {
    $.ajax({
      url: "test.php"
    }).done(function() { 
      x = true;
    });
 }
 else
 {
    setTimeout(ajax(),3000);
 }

答案 3 :(得分:0)

如果此PHP脚本是通过Web服务器运行,还是在命令行上运行,则您的问题不明确。

如果您正在谈论在命令行上运行,那么执行以下操作:

#!/bin/bash

while true
do
    php script_that_returns_non_zero_if_it_fails.php && break
    sleep 300 # sleep 5 minutes
done

答案 4 :(得分:0)

如果条件返回false或等效,我可能会创建一个在sleep()之后调用自身的函数。

<?php
function doSomething() {
    // do request, should return true or false
    $result = dymmyRequestFunction();
    if ($result === false) {
        sleep(300);
        doSomething();
    }
}

希望有所帮助。

答案 5 :(得分:0)

Ajax就是答案......就像这样

xmlHttp.open('GET', '/ajax/script.php?id=' + id, true);
xmlHttp.onreadystatechange = function()
{
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
    {
       //complete
    }
    else
    {
       //try again
    }
}