为什么cron执行php脚本有点不同?
我有一个为什么cron执行php脚本有点不同?,php,mysql,cron,Php,Mysql,Cron,我有一个file1.php,其中包括来自其他file2.php的函数。正在执行的MySQL查询选择并在该函数中插入信息。 首先,它执行select查询,然后所有内容都写入数组,然后再从数组插入到MySQL数据库。 当函数在浏览器中执行时,它可以正常工作,但当cron执行函数时,函数中的脚本不会在MySQL数据库中插入任何内容(还有其他MySQL和数组命令可以与cron正常工作) 我不知道会是什么 我已尝试调试并输出cron执行,但未成功 当cron正在执行时,该代码在函数中不起作用,但在浏览器中
file1.php
,其中包括来自其他file2.php
的函数。正在执行的MySQL
查询选择并在该函数中插入信息。
首先,它执行select查询,然后所有内容都写入数组,然后再从数组插入到MySQL
数据库。
当函数在浏览器中执行时,它可以正常工作,但当cron
执行函数时,函数中的脚本不会在MySQL
数据库中插入任何内容(还有其他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}");
}}
}
?>
在浏览器中手动执行脚本时:
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警告:模块'xdebug'已在第0行的未知位置加载
我建议您查看一下PHP日志,是否发生了错误
当您使用crontab运行PHP脚本时,执行该脚本的活动目录与您的web服务器运行时不同。尝试使用绝对路径(从磁盘根目录)要求file1.php中的file2.php文件。从命令行调用php文件时,您使用的是当前环境。确保您的crontab使用相同的环境。请提供准确的代码示例和
php
配置。您使用的是环境变量还是.env
文件?执行cron
的用户是否与手动执行脚本的用户相同?日志如下(cron)info(未安装MTA,丢弃输出)
。看起来数组可能只是空的。但是还有其他代码和数据库中的数组和数据,一切正常。@MantasKildiš正在检查:Crontab
filePATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/sbin:/usr/sbin:/usr/bin:/usr/bin
和环境
filePATH=“/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/games:/usr/local/games:/sbin:/
在浏览器中执行PHP文件时,如何检查使用的环境变量?
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)