以下是这个想法:php脚本将发布的数据发送到其他服务器。如果服务器无法获取发布的数据,PHP脚本应该在几分钟后重试。
如果第一次尝试失败,程序员如何在几分钟内再次执行脚本以完成任务?
我想创建一个php脚本,当被新数据通知或数据库插入时,会调用其他服务器并将数据发布到服务器。因此,不涉及HTML / CSS / JS。它完全是命令行 - 在后台运行。那么,如果第一次执行失败怎么办?如何在几分钟内再次重试脚本?
答案 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
}
}