gpt4 book ai didi

php - 作为 cronjob 运行脚本时为 "MySQL server has gone away"

转载 作者:行者123 更新时间:2023-11-29 21:21:58 25 4
gpt4 key购买 nike

我有一个运行 PHP 脚本的 cronjob,该脚本获取数百个 RSS 提要,解析它们,更新数据库,然后写入新的 Atom 和 RSS 提要文件。

当我在浏览器中调用该脚本时,该脚本运行良好,但是当我让 crond 运行它时,它会向我发送以下错误:

Warning:  mysqli::query(): MySQL server has gone away in /script.php on line 149

以下是脚本中的相关代码部分:

// ...
// the script has now been running for some time,
// fetching feeds, parsing them, and updating the database;
// now we check if the connection to the mysql server is still there,
// and then query the database and write the feed files

if (!isset($mysqli)) {
$mysqli = new mysqli($db_host,
$db_username,
$db_password,
$db_name);
$mysqli->set_charset('utf8');
$mysqli->query("SET lc_time_names = 'de_DE'");
}

$query = "..."; // some SELECT query

if (!($result = $mysqli->query($query))) { // this is line 149
// error message
}

// write the feed files
// ...

如您所见,在发送查询之前,我会检查连接是否成立。显然,数据库服务器断开了检查它和执行查询之间的连接。至少我是这么认为的。

那么,为什么会发生这种情况,以及我该怎么做才能保持连接处于事件状态(如果这确实是问题所在)?

我的 PHP 脚本在共享服务器(带有 Apache 的 Linux)上运行,并且我没有 MySQL 服务器的 root 访问权限 - 因此所有相关问题都无法回答我的问题,因为它们都建议更改数据库中的设置服务器配置文件。

此外,如果从浏览器调用,该脚本将在与我让 crond 执行它时 (5.5) 不同的 PHP 版本 (5.6) 下运行。请参阅this related question .

<小时/>

我已尝试关闭现有连接并重新建立它,如 this answer 中的建议。 :

$mysqli->close();
if (!isset($mysqli)) {
$mysqli = new mysqli($db_host,
$db_benutzername,
$db_passwort,
$db_name);
$mysqli->set_charset('utf8');
$mysqli->query("SET lc_time_names = 'de_DE'");
}

并且我尝试按照 this answer 中的建议设置执行时间限制:

set_time_limit(180);

或者拉杰普特王子的回答如下:

ignore_user_abort(true);
set_time_limit(0);

但这些都没有帮助。

最佳答案

在 cron 作业文件的标题上尝试一下:

<?php
ignore_user_abort(true);
set_time_limit(0);
?>

关于php - 作为 cronjob 运行脚本时为 "MySQL server has gone away",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35681798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com