【问题标题】:Cron job script not workingCron 作业脚本不起作用
【发布时间】:2016-09-01 21:14:17
【问题描述】:

所以基本上我有这个在 godaddy php 5.4 上工作的 cronjob 脚本,但是在不同的主机上它不起作用,也尝试了不同的 php 版本。我有正确的 cron 路径,主机支持说我做到了,甚至向我展示了日志。也许这个脚本有问题?它基本上为用户帐户添加能量点。

<?php
include "../core.php";
//Fuel Refill (by default every 10 minutes)

$sqlusers = mysql_query("SELECT * FROM users WHERE banned='No'");
while ($rowuser = mysql_fetch_assoc($sqlusers)) {
    if ($rowuser['fuel'] < $rowuser['fuelcapacity']) {
        $userfuelrefill = mysql_query("UPDATE users SET fuel=fuel+1 WHERE username='$rowuser[username]'");
    }
}

echo '<meta http-equiv="refresh" content="0;url=../garage">';
?>

【问题讨论】:

  • 为什么一个 cron 脚本有 html?你可以从命令行运行它吗?你使用的 cron 调用是什么?这包括我的猜测-尝试绝对路径。为什么要循环,你不能只运行:UPDATE users SET fuel=fuel+1 WHERE banned='No' and fuel &lt; fuelcapacity
  • 向我们展示 crontab 行。正如@nogad 所说,为什么是 html?
  • 我的路径是:/usr/local/bin/php /home/USERNAME/public_html/cron/fuelrefill.php我不是程序员,我从某人那里购买了这个脚本,这个,不知道为什么它可以在一台主机上运行而不是在另一台主机上运行......
  • 很有可能您的新主机不支持(或启用)mysql_* 方法,因为根据您的PHP 版本,它们已被弃用或删除。 @nogad 确实提供了一个非常合理的解决方案,以提高效率。
  • 这个脚本可以减少到 3 行。但首先我会检查包含和@Blake 的建议

标签: php cron


【解决方案1】:

mysql 扩展已被弃用,因此请尝试以下 PDO 方法:

<?php 
require [full/script/path/]core.php;
$PDO = new PDO([INSERT CONNECTION STRING]);
$result = $PDO->query("SELECT * FROM users WHERE banned='No'")->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row)
{
   if ($row['fuel'] < $row['fuelcapacity']) {
     $query = "UPDATE users SET fuel=fuel+1 WHERE username= :username";
     $query = $PDO->prepare($query);
     if ($query->execute(array(':username' => $row[username]))) {
     } else { throw new Exception('SQL Query Failed [' . $query->errorCode . ']'); }
   }
}
echo '<meta http-equiv="refresh" content="0;url=../garage">';

当然,您必须替换一些东西,例如连接字符串和完整路径,但这应该在启用 PHP PDO 的情况下工作。

【讨论】:

  • 为什么不解决其他问题呢?除非他更改 core.php 以添加 PDO 连接,否则这将失败
  • 除非core.php 启动他不会有的连接。他们还说他们不是程序员,所以这是我能想到的最微创的解决方案,以防止进一步的必要修改。我的意思是我们可以把它变成一个 Laravel 应用程序并将其路由到调度程序中,但是将一个框架内联到堆栈溢出 cmets 中实在是太费时了,哈哈……我希望你能接受我的讽刺和玩笑@nogad
  • 为什么要鼓励某人运行 n 个查询,而他们只能运行一个查询?并且不必为包含使用完整路径。有亲戚就好了。
  • 好吧,我想你在技术上是正确的。尽管 OP 没有说明他是否要更改解决方案的实际结构。但我想你的方法有效。如果我这样做了,我会觉得我在偷窃,您会提交您的解决方案作为答案吗?
  • 感谢 Nogad、Blake、Lemoney 的努力!我的主机支持给出了一个解决方案(直接路径): cd /home/USERNAME/public_html/cron/; /usr/local/bin/phpfuelrefill.php
猜你喜欢
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
相关资源
最近更新 更多