【问题标题】:Run a "long" php-script via Cronjob通过 Cronjob 运行一个“长”的 php 脚本
【发布时间】:2013-07-04 06:02:29
【问题描述】:

所以我有一个需要来自远程服务器的数据的 php 脚本。它是这样的:

set_time_limit(100);
ignore_user_abort(true);

$x = 0
while($x < 10){
    $data = file_get_contents("http://www.remoteserver.com/script");
    // do something with the data
}

// insert ALL the gained data in the local database

如果我在浏览器中打开脚本,大约需要 10 秒才能完成。但是,我需要循环它不是 10 次,而是 24 次。然后脚本大约需要 22 秒才能完成。我无法在循环中插入数据,我需要等到循环结束。

现在,有趣的部分是,当循环设置为 10 时,如果脚本通过 cronjob 运行,它会设法完成。 如果设置为 24,则脚本无法完成,本地数据库中不会插入任何数据!

这是为什么?我的问题有什么解决办法吗?当我在浏览器中打开它时,它工作正常。

我用这个 cronjob 命令调用脚本:

php public_html/example.com/my_script.php

我使用这个 cronjob 命令得到了相同的结果:

curl "http://example.com/my_script.php"

【问题讨论】:

  • 你能达到你的内存限制吗?你有任何错误返回吗?

标签: php cron crontab cron-task


【解决方案1】:

要在不超时的情况下运行,set_time_limit(0)

要在不等待结果的情况下运行,请通过管道传输脚本。php -f /path/to/file 2&gt;&amp;1

【讨论】:

  • “管道脚本..”是什么意思?
【解决方案2】:

我有类似的问题(并发问题)。如果您的脚本需要更多时间来执行然后 cron 调用它的时间段,您可能也有它。尝试锁定文件,例如:

$fp = fopen(dirname(__FILE__), 'r'); 
if (flock($fp, LOCK_EX | LOCK_NB)) // lock yourself
{
    ...do your thing...
    flock($fp, LOCK_UN); // unlock yourself
}
fclose($fp);

【讨论】:

    猜你喜欢
    • 2020-08-28
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    相关资源
    最近更新 更多