【问题标题】:MySQL Database connection error when using cron to run PHP file使用cron运行PHP文件时MySQL数据库连接错误
【发布时间】:2019-10-28 03:55:39
【问题描述】:

我必须每两个小时从 cron 作业运行一个 PHP 文件,并且在通过 cron 运行 PHP 脚本时出现 MySQL 数据库连接错误。该脚本可以正常运行,完全符合我的预期,它可以从浏览器甚至命令行运行。

我已阅读在 Google 搜索结果中找到的所有答案,但没有一个可以解决我的问题。我认为没有任何与我的问题相关的答案,所以我问这个问题。

以下是数据库连接php脚本:

<?php

$cs = "localhost";
$cu = "root";
$cp = "mypassword";
// $cp = "";
$cn = "mydatabasename";

$conn = @mysqli_connect($cs, $cu, $cp, $cn);

if (!$conn) {
    die("Database connection error... " . mysqli_connect_error());
}

我正在从浏览器和命令行运行脚本,一切正常,正如我预期的那样,就在我从 cronjob 运行它时,我收到以下错误:

数据库连接错误...用户'root'@'localhost'的访问被拒绝(使用密码:NO)

假设 root、mypassword、mydatabasename 是正确的凭据,因为我可以在浏览器甚至命令行上成功运行脚本。我在 cronjob 中使用 PHP 文件的绝对路径。

我正在通过这个命令运行 cronjob:

0 0-23/2 * * * php -f /var/www/html/project-name/execute-cronjob.php >> /var/www/html/project-name/output.log

我使用的是 Ubuntu,并且有一个 VPS 服务器。

【问题讨论】:

  • 请不要使用@ 抑制错误,因为这会隐藏 潜在的错误消息(这对于调试至关重要)。顺便说一句,您是否收到上述代码或 $cp = ""; 未注释的错误消息?否则我不知道您将如何获得using password: NO
  • 你能试试 127.0.0.1而不是localhost吗?
  • @MagnusEriksson 在我的本地计算机上密码为空,所以我在本地使用它,然后在它上传到服务器时发表评论。我也很困惑,当我使用密码时我怎么会遇到问题!感谢您澄清“@”...
  • 是否有任何适当的方法可以使用使用并需要 MySQL 数据库连接的 cronjob 运行 PHP 文件?
  • 对于 cron 任务,如果你是 linux 用户,你可以使用 shell scipt。如果您是 Windows 用户,则使用批处理脚本。

标签: php mysql cron


【解决方案1】:

改用shell脚本

mysql --user=[username] --password=[password] --database=[db name] --execute="you query goes here"

有类似的答案here

【讨论】:

  • echo "这是你记录到文件的方式" >> /var/log/customlog
  • 这只有在他们想要每次都进行相同的静态查询时才有效。这可能是他们想要的,但我们应该先问清楚。如果他们想传递一些动态数据或对响应做一些事情,那么这将无济于事。
  • @MagnusEriksson 目前我只想运行一个静态查询,所以这将是我的最后一个选择,但仍然需要一个好的答案,因为我将来可能需要传递更多动态数据。跨度>
  • 您可以忽略此警告或从文件中读取密码
  • 如何处理收到的回复?无论我会得到什么响应,我都想将它作为命令运行,因为要运行的命令存储在数据库中,我想每 2 小时查询一次并运行一次
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 2023-04-02
  • 2013-10-26
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多