首页 > 解决方案 > 为什么 cron 执行 php 脚本有点不同?

问题描述

我有file1.php其中包括其他的功能file2.php。正在执行的MySQL查询在该函数中选择和插入信息。首先,它正在执行选择查询,然后一切都写入数组,然后从数组MySQL再次插入数据库。当函数在浏览器中执行时它工作正常,但函数中的脚本在执行函数时没有插入MySQL数据库中cron(还有其他MySQL和数组命令可以正常工作cron)。

我不知道它可能是什么。

我试过调试和输出cron执行但不成功。

代码在执行时不起作用,cron但在浏览器中执行时起作用。

<?php    
 global $db;
$mycfg_channels = mycfg('channels');
$mycfg_lang = mycfg('lang');
$_channels = db_query("SELECT id, xmlid, chname FROM `program_name` WHERE `enable`=1 AND `id` IN ({$mycfg_channels});");
$channels = array();
foreach (explode(",", $mycfg_channels) as $v) {
$channels[$v]= @$_channels[$v];
           }
     $result = $db->sql_query("SELECT `username` FROM `users_export`;");
         $operats = array();
      while ($row = $db->sql_fetchassoc($result)) {
                $operats[]= $row['username'];
            }
            $operators_channels = array();
foreach ($operats as $key => $value) {
 $channels_id_response = $db->sql_query("SELECT `channels_id` FROM `users_export` WHERE `username`= '{$value}'");

                $row = array();
                $row = $db->sql_fetchrow($channels_id_response);
                foreach ($row as $val) {
                    $ch_value = $val;
                }
 $channels_id_exploded = explode(",", $ch_value);
                $allowed_channels = array();
                foreach ($channels_id_exploded as $ch) {
                    $allowed_channels[] = $ch;
                }
                $operator_channels_from_mycfg = array();
         foreach($allowed_channels as $ch) {
foreach ($channels as $c) {
    if ($ch == $c['xmlid']){
$operator_channels_from_mycfg[] = $c;
    }}
}
foreach ($operats as $key => $val) {
    if ($value == $val ) {
foreach ($operator_channels_from_mycfg as $k => $v) {
      $operators_channels[$val][]= $v['xmlid'];
    }
    }   
}
} 
$operators_channels_delta = array();
foreach ($operators_channels as $key => $value) {

  foreach ($value as $k => $v) {

    $delta_from_db = $db->sql_query("SELECT `{$key}_delta` from `program_schedule` WHERE `chid`='{$v}'");    
     while ($row = $db->sql_fetchrow($delta_from_db)) {

   $operators_channels_delta[$key][$v] = $row[$key+'_delta'];  
            }
  }

  }
  var_dump($operators_channels_delta);

foreach ($operators_channels_delta as $key => $value) {

foreach ($value as $k => $val) {
if (isset($val)){
$db->sql_query("UPDATE `program_schedule` SET `{$key}_delta`= '{$val}' WHERE `chid`={$k}");
}}
    }


?>

它的输出syslogcron执行脚本时:

Nov 19 14:09:01 media CRON[1689]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime) >> /var/log/cronlog 2>&1)
Nov 19 14:09:01 media CRON[1693]: (www-data) CMD (/var/www/StartStop/html/includes/cron_1sec.php >> /var/log/cronlog 2>&1)
Nov 19 14:09:01 media CRON[1688]: (CRON) info (No MTA installed, discarding output)
Nov 19 14:09:01 media CRON[1687]: (CRON) info (No MTA installed, discarding output)

当我在浏览器中手动执行脚本时:

Nov 19 14:12:01 media CRON[3132]: (www-data) CMD (/var/www/StartStop/html/includes/cron_1sec.php >> /var/log/cronlog 2>&1)
Nov 19 14:12:01 media CRON[3131]: (CRON) info (No MTA installed, discarding output)

通过 MTA 获取输出是不成功的。

我可以从该输出中获得有关环境变量的哪些信息?在文件中/var/log/cronlog我只得到PHP Warning: Module 'xdebug' already loaded in Unknown on line 0

标签: phpmysqlcron

解决方案


当您从命令行调用 PHP 文件时,您使用的是当前环境。确保您的 crontab 使用相同的环境。


推荐阅读