【问题标题】:cronjob not executed for a particular file未为特定文件执行 cronjob
【发布时间】:2012-11-24 00:55:08
【问题描述】:

我有一个 cron 设置来运行一个 php 文件,但由于某种原因,它在时机成熟时不起作用。我可以在终端中手动调用相同的文件,它工作正常。也没有错误消息。

注意:为不同的文件夹和文件设置了更多作业,它们都可以正常工作。权限也是一样的。

谢谢

CRON

30 2 * * 1,2,3,4,5 php /var/www/html/cronjob/update-db.php

权限

drwxr-xr-x  2 root   root      4096 Nov 20 10:17 cronjob

-rwxr-xr-x 1 root root 5808 Nov 21 17:21 update-db.php
  • conn.php 正被许多其他 cronjobs 使用并且工作正常。
  • 当我在终端中调用它时,这段代码运行良好。
  • 除此之外,其他所有 cronjob 都可以正常工作。

代码

require_once "/var/www/html/dbfolder/conn.php";


function write_log($message)
{
    $filename = 'update-sis-assessment-column-log.txt';

    if (file_exists($filename))
    {
        $handle = fopen($filename, 'a');
    }
    else
    {
        $handle = fopen($filename, 'w');
        //chmod($filename, 0644);
    }

    fwrite($handle, $message . "\r\n\r\n");
    fclose($handle);

    exit;
}

if (connectDB() === true)
{
    $query = "SELECT.......";
    $rcset = mysql_query($query);

    $terms = null;

    if (@mysql_num_rows($rcset) > 0)
    {
        while ($records = mysql_fetch_array($rcset))
        {
            if (ctype_digit($records['Term']))
            {
                $terms .= "'" . substr($records['Term'], 0, 4) . "-01', ";
            }
        }

        $terms = substr($terms, 0, -2);
    }

    write_log('DONE : ' . $terms);
}

【问题讨论】:

  • 你检查 cronlog 了吗?
  • GBD cronlog 在哪里?我试图查看 /home/user/cronlog.log 但不存在

标签: php linux cron


【解决方案1】:

确保 php 可执行文件在您的路径中,或者将 php 的完整路径放在 cron 作业中,例如

30 2 * * 1,2,3,4,5 /usr/bin/php /var/www/html/cronjob/update-db.php 

如果你不确定 php 的位置,你可以运行

which php

获取路径

【讨论】:

  • 我有大约 20 个工作,并且在没有 /usr/bin/php 部分的情况下都可以正常工作,还包括文件具有 0755 权限。
  • 那么我建议您按照 san4o 的建议进行操作并检查日志文件中的错误,您应该记住的另一件事是,如果您在 cron 中包含其他 php 文件,则需要确保路径也是正确的
  • 刚刚发现,同一个文件在不同的文件夹中工作。所有文件夹和文件的权限都是相同的。但是在原始文件夹中仍然不起作用。没有错误。
  • 仔细查看您的 update-db.php 文件,如果您可以发布这个文件可能会更容易找到问题
  • require_once 出现错误,我通过将其更改为 require_once '/var/www/html/dbfolder/conn.php' 来纠正它。现在/var/spool/mail/ 中没有错误。 conn.php 已被许多应用程序使用,并且可以 100% 正常运行。
【解决方案2】:

还建议将输出重定向到日志文件并使用更短的运行时间间隔进行调试

*/5 * * * * /usr/bin/php /var/www/html/cronjob/update-db.php >> /path_to_log.log

【讨论】:

  • 添加一些调试 echo "some ...";在 php 脚本中。你在这个 crontab 中还有其他工作吗?他们工作吗?
猜你喜欢
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
相关资源
最近更新 更多