内容简介:睡觉之前,记录昨天遇到的一个问题,不然时间一长我就忘记了,如果我从工作开始就写博客,那么很多美好的事情都不会忘记了,自己的技术水平肯定也会提升一大截。昨天上班后,同事说有一些问题,由于相关程序是队列运行的,先查看了一下php cli错误日志,发现很多脚本提示 Call to undefined function,当时觉得挺奇怪的,因为其他web机器没有该问题。然后手动运行了一个脚本,没有任何问题,基本上断定是cron运行导致的,就先模拟写了个小程序:
睡觉之前,记录昨天遇到的一个问题,不然时间一长我就忘记了,如果我从工作开始就写博客,那么很多美好的事情都不会忘记了,自己的技术水平肯定也会提升一大截。
昨天上班后,同事说有一些问题,由于相关程序是队列运行的,先查看了一下php cli错误日志,发现很多脚本提示 Call to undefined function,当时觉得挺奇怪的,因为其他web机器没有该问题。
然后手动运行了一个脚本,没有任何问题,基本上断定是cron运行导致的,就先模拟写了个小程序:
include "init.php"; echo "start"; echo self_function();//定义在init.php中 echo "end";
然后设置cron:
*/1 * * * * www php /usr/local/www/index.php >> /usr/local/www/debug.log
还是同样的问题,因为是找不到函数,将 include 改为 require 也还是同样的报错,而不是说找不到文件,这就很诡异了;然后把 cli 命令行模式的 Opcache 关闭了,同样报错;
因为以前cron运行 Python 遇到过编码的问题,所以一个闪念,修改了cron:
*/1 * * * * www cd /usr/local/www; php index.php
运行没有问题,虽然问题解决了,但这样cron部署就没有通用性了,所以感觉还是不好。
不断试验,将 init.php 改为 init2.php,然后cron运行就没问题,是不是文件缓存?不管是删除init.php重建;或者stat修改属性;或者将init.php引用目录改为/usr/local/init.php,还是不行,只要名字为 init.php 就是不行。
查看 /var/log/cron 也没有问题。甚至重启 systemctl restart crond.service 也还是不行。
后来同事发了一个php cli 错误报错,虽然看过错误日志但没有注意,猛的发现提示 /home/www/init.php 中没有 HTTP_HOST,怎么提示在 /home/www 目录下?
立刻去/home/www/一看,还真有init.php,删除后,cron正确运行。
基本上验证了 cron 会以 $HOME /home/www 环境变量运行,相当于 index.php 引用 /home/www/init.php,而不是相对路径引用 /usr/local/www/init.php。
后面代码引用文件还是绝对路径较好,那这个 /home/www/init.php 怎么来的呢?这反应了线上环境不能轻易登陆,明年去申请一台配置较低的ecs,作为开发环境和QA环境。
最后还是说一句,其实意识到环境变量的问题,但还是排查了很久,一方面是基本功问题,一方面也是判断力的问题。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Mining
Jiawei Han、Micheline Kamber、Jian Pei / Morgan Kaufmann / 2011-7-6 / USD 74.95
The increasing volume of data in modern business and science calls for more complex and sophisticated tools. Although advances in data mining technology have made extensive data collection much easier......一起来看看 《Data Mining》 这本书的介绍吧!