php在浏览器中执行但在cron作业中失败[已关闭]

k5ifujac  于 2022-11-28  发布在  PHP
关注(0)|答案(2)|浏览(177)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。

这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
4天前关闭。
Improve this question
我正在尝试创建一个演示网站供用户测试。我想每隔x小时恢复一次数据库。当我在浏览器中运行php脚本时,它工作了。它删除了表并恢复了数据库,没有任何问题。当我在cron中添加相同的文件时,表被删除了,但它没有恢复数据库。我不知道为什么它没有恢复数据库。

<?php 

$mysqli = new mysqli("localhost", "", "", "");
$mysqli->query('SET foreign_key_checks = 0');
if ($result = $mysqli->query("SHOW TABLES"))
{
    while($row = $result->fetch_array(MYSQLI_NUM))
    {
        $mysqli->query('DROP TABLE IF EXISTS '.$row[0]);
    }
}

$mysqli->query('SET foreign_key_checks = 1');

echo "Deleted databse";

sleep(5);

$sqlScript = file('demo.sql');
foreach ($sqlScript as $line)   {
    
    $startWith = substr(trim($line), 0 ,2);
    $endWith = substr(trim($line), -1 ,1);
    
    if (empty($line) || $startWith == '--' || $startWith == '/*' || $startWith == '//') {
        continue;
    }
        
    $query = $query . $line;
    if ($endWith == ';') {
        mysqli_query($mysqli,$query) or die('<div class="error-response sql-import-response">Problem in executing the SQL query <b>' . $query. '</b></div>');
        $query= '';     
    }
}
$mysqli->close();

echo '<div class="success-response sql-import-response">SQL file imported successfully</div>';
?>

Cron作业

*/10    *   *   *   *   /usr/local/bin/php /home/demo/public_html/db.php
e37o9pze

e37o9pze1#

如上所述,在您的脚本中有一个相对路径,因此您需要从脚本所在的目录运行它。您可以简单地将cron命令替换为:

*/10 * * * * cd /home/demo/public_html/ && /usr/local/bin/php /home/demo/public_html/db.php

&&表示在应用第一个命令后,应用下面的命令。

icnyk63a

icnyk63a2#

aynber在注解中提供了答案
Cron作业要么相对于运行它的用户的home运行,要么相对于服务器根(如果它使用/etc/cron)运行。file('demo.sql');查找脚本运行位置的相对文件路径,因此当由cron运行时,它将失败
我更新了sql文件路径,它工作了。

相关问题