php debug二三事

最近php相关项目遇到了一些问题,处理起来让人感受挺有意思,寥寥记下。php

1.php执行后常驻内存里,须要kill掉该进程再重启,才能让修改后的代码生效。html

以前有一次组里小伙伴修改了一个长期后台进程运行的php脚本,增长了一些业务逻辑判断。以后我进行部署之时一直忘记将其php进程kill掉,测试的时候一直找不到未生效的缘由。后面想到了后台持续run的脚本是从内存里面读取的代码块,而不是加载最新的代码脚本。对于php咱们经常脑补无需重启(如node)或者编译(java)直接生效,可是对于一直运行的脚本否则。java

Tips 2 若是使用ps aux | grep xxx来判断脚本是否运行,请尽可能精准grepnode

 

又是一次后台进程任务的添加,采用方式的是shell脚本监控php进程并维护其始终运行。此次我由于事情比较忙,让F君本身动手在测试服上写好shell去执行。后面发现一直没有成功run起来php任务。shell

我先尝试了直接php命令执行php脚本是没问题的,排查了脚本自己的问题。而后又仔细看了一下shell发现也没什么问题,最后经过对比以前的写法,发现是由于在判断是否有php脚本进行的时候用的grep 不够精准,以下图。框架

很凑巧的是,F君写的shell脚本的名字也是new_notice,和php脚本名撞名了。全部尽管shell里面是while true的死循环,可是每次检查都会发现有叫new_notice的进程(由于同名shell脚本一直保持运行),故而不会进行启动php进程的逻辑块,后台任务也永远没法执行。养成习惯精准grep或者将shell脚本名改成更抽象的名称都是不错的方法。可是本质是grep要精准到脚本全称,包括文件扩展后缀名。测试

 

Tips 3 报错要重视,框架要熟悉。网站

 

为了减小老框架的束缚,我鼓励组内小伙伴在一些业务牵连不大的新项目中尝试使用新的框架来作业务。今天恰好是新的统计服务部署到线上的时间,我刚部署完后,F君和我说mongoauth failed。通过一顿baidu后,发现须要在tp5mongo driver实现里面修改源码,把MongoDB\Driver\Manager的链接URI最后加上database参数。尝试添加后再也不报auth failed的错误,却直接页面显示该网站永久性转移。去掉后又报auth failed,对比线上和测试服的代码和mongo扩展版本都没有什么问题,也曾怀疑过两个环境的mongo sever版本问题,发现差别也不大。spa

 

通过一顿猛如虎的操做,最后发现是由于项目根目录下没有runtime目录形成的。一边赶地铁回家,一边刷着知乎的我发誓之后必定要重视框架的细节,细节决定不少步,包括下一步。htm

 

原文出处:https://www.cnblogs.com/freephp/p/10085724.html

相关文章
相关标签/搜索