php - 为什么 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}");
}}
}
?>
它的输出syslog
。cron
执行脚本时:
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
解决方案
当您从命令行调用 PHP 文件时,您使用的是当前环境。确保您的 crontab 使用相同的环境。
推荐阅读
- c# - 使用 HtmlAgilityPack 和 Json 解析网页
- php - REPLACE mySQL 不在 mySQL 表中追加/替换
- python - pycurl安装问题
- ios - 来自不同表格视图单元格的 iOS 数字编号未按预期对齐
- customization - ExoPlayer - 是否可以以编程方式更改 DefaultTimeBar 的颜色?
- c# - While循环不会退出C#
- html - 在保持 CSS 控制的同时重用 SVG 图像
- linux - 如何使用文件名中的日期查找超过一个月的文件?
- javascript - 参数不会被提升,会触及时间死区?
- javascript - 如何以编程方式触发鼠标悬停?(orce 悬停状态不起作用)