Cron作业没有运行php脚本

时间:2017-12-31 12:44:12

标签: php cron

我已使用以下命令在我的cpanel中创建了一个cron作业:

/ usr / bin / php -q /home/user/public_html/folder/subfolder/sync.php

syns.php的内容几乎就是这样。当我使用domain.com/folder/subfolder/sync.php这样的域运行它时,它可以正常工作,但是当cron作业应该运行时,我看不到预期的结果,这意味着cron作业没有运行脚本。那么有谁能告诉我可能是什么问题?

<?php

$dir = str_replace("public_html","", $_SERVER["DOCUMENT_ROOT"]);
$dir = $dir . "configuration.php";

if (file_exists($dir)) 
{
    require_once($dir);
    sync();
} 
else
{
    // echo ("Can't find the access data.");
}

function sync()
{
    $connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
    if(mysqli_connect_errno())
    {
        // echo ("Failed to connect the database.");
        exit();
    }
    else
    {
        if(mysqli_ping($connection))
        {
            $query = "SELECT OR UPDATE WHATEAVER FROM TABLE;";
            $result = mysqli_multi_query($connection, $query);
            if($result)
            {
                // Do stuff
            }
            else
            {
                // echo("Failed to excute the query.");
            }
        }
        else
        {
            // echo("Failed to ping the connection.");
        }
    }
    mysqli_close($connection);
}

?>

1 个答案:

答案 0 :(得分:1)

在调用PHP之前,

$_SERVER['DOCUMENT_ROOT']由您的网络服务器(例如Apache)创建。如果您通过cronjob运行脚本,则会绕过您的网络服务器而DOCUMENT_ROOT将不存在。

您应该以另一种方式确定配置文件的位置。一种方法是使用PHP的内置常量来处理文件位置,例如__FILE____DIR__

$dir = __DIR__ . "/configuration.php";

__DIR__指的是包含当前文件的文件夹,因此这将成为/home/user/public_html/folder/subfolder/configuration.php

从您使用$_SERVER['DOCUMENT_ROOT']开始,我假设您的配置文件是public_html以上的一个文件夹,因此您可以执行以下操作:

$dir = __DIR__ . "/../../../configuration.php";