php debug二三事
最近php相关项目遇到了一些问题,处理起来让人感觉挺有意思,寥寥记下。
1.php执行后常驻内存里,需要kill掉该进程再重启,才能让修改后的代码生效。
之前有一次组里小伙伴修改了一个长期后台进程运行的php脚本,增加了一些业务逻辑判断。之后我进行部署之时一直忘记将其php进程kill掉,测试的时候一直找不到未生效的原因。后面想到了后台持续run的脚本是从内存里面读取的代码块,而不是加载最新的代码脚本。对于php我们常常脑补无需重启(如node)或者编译(java)直接生效,但是对于一直运行的脚本不然。
Tips 2 如果使用ps aux | grep xxx来判断脚本是否运行,请尽量精准地grep。
又是一次后台进程任务的添加,采用方式的是shell脚本监控php进程并维护其始终运行。这次我因为事情比较忙,让F君自己动手在测试服上写好shell去执行。后面发现一直没有成功run起来php任务。
我先尝试了直接php命令执行php脚本是没问题的,排查了脚本本身的问题。然后又仔细看了一下shell发现也没什么问题,最后通过对比之前的写法,发现是因为在判断是否有php脚本进行的时候用的grep 不够精准,如下图。
很凑巧的是,F君写的shell脚本的名字也是new_notice,和php脚本名撞名了。所有尽管shell里面是while true的死循环,但是每次检查都会发现有叫new_notice的进程(因为同名shell脚本一直保持运行),故而不会进行启动php进程的逻辑块,后台任务也永远无法执行。养成习惯精准grep或者将shell脚本名改为更抽象的名称都是不错的方法。但是本质是grep要精准到脚本全称,包括文件扩展后缀名。
Tips 3 报错要重视,框架要熟悉。
为了减少老框架的束缚,我鼓励组内小伙伴在一些业务牵连不大的新项目中尝试使用新的框架来做业务。今天刚好是新的统计服务部署到线上的时间,我刚部署完后,F君和我说mongo的auth failed。经过一顿baidu后,发现需要在tp5的mongo driver实现里面修改源码,把MongoDB\Driver\Manager的连接URI最后加上database参数。尝试添加后不再报auth failed的错误,却直接页面显示该网站永久性转移。去掉后又报auth failed,对比线上和测试服的代码和mongo扩展版本都没有什么问题,也曾怀疑过两个环境的mongo sever版本问题,发现差异也不大。
经过一顿猛如虎的操作,最后发现是因为项目根目录下没有runtime目录造成的。一边赶地铁回家,一边刷着知乎的我发誓以后一定要重视框架的细节,细节决定很多步,包括下一步。
php debug二三事的更多相关文章
- Emacs 启动优化二三事
Emacs 启动优化二三事 */--> div.org-src-container { font-size: 85%; font-family: monospace; } p {font-siz ...
- WinForm二三事(三)Control.Invoke&Control.BeginInvoke
http://www.cnblogs.com/yuyijq/archive/2010/01/11/1643802.html 这个系列从2009年写到2010年,差点又成太监文.随着WPF/Silver ...
- Java并发编程二三事
Java并发编程二三事 转自我的Github 近日重新翻了一下<Java Concurrency in Practice>故以此文记之. 我觉得Java的并发可以从下面三个点去理解: * ...
- linux杂记(十二?) 关于账号和密码的二三事
关于密码的二三事 关于账号和密码的二三事 久了不更linux的相关知识,实在是懒得想内容点(纯粹是懒).那么今天就来谈谈关于linux密码和账号的重要概念. 假如你的主机遭到入侵,那么对方的第一个侵入 ...
- MySQL5.7关于密码二三事
MySQL5.7关于密码二三事 第一个:update user set password=password('root') where user='root' and host='localhost' ...
- Java中的匿名内部类及内部类的二三事
匿名内部类适合创建那些只需要使用一次的类,它的语法有些奇怪,创建匿名内部类会立即创建一个该类的实例,这个类定义立即消失,且不能重复使用. 定义匿名类的格式如下: new 实现接口() |父类构造器(实 ...
- iOS7下滑动返回与ScrollView共存二三事
[转载请注明出处] = =不是整篇复制就算注明出处了亲... iOS7下滑动返回与ScrollView共存二三事 [前情回顾] 去年的时候,写了这篇帖子iOS7滑动返回.文中提到,对于多页面结构的应用 ...
- 一只代码小白git托管路上的二三事
[经验]一只代码小白git托管路上的二三事 写在前面的话 寒假的时候,娄老师给我们布置了代码托管的作业,并要求把托管地址发给学委.因假期的时候没有带电脑回家,所以只是在手机上草草注册了,也稀里糊涂就将 ...
- YTU 1008: 童年生活二三事
1008: 童年生活二三事 时间限制: 1000 Sec 内存限制: 64 MB 提交: 842 解决: 592 题目描述 Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去. ...
随机推荐
- window.showModalDialog的问题
通过window.showModalDialog的方式弹出B页面,总报“拒绝访问”的错误,将站点添加到受信任站点可以解决这个问题
- jQuery——入口函数
中文网 http://www.css88.com/jqapi-1.9/ 版本兼容问题 版本一:1.x版本,兼容IE678 版本二:2.x版本,不兼容IE678 入口函数区别 <script> ...
- [Windows Server 2008] 安装IIS7.5及FTP
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装IISII ...
- 搜索条件两个时间,通过php数组排序,保证select语句between时间 前小后大
//搜索条件两个时间,通过数组排序,保证select语句between时间 前小后大 $sort_array=[$_POST['clockDate1'],$_POST['clockDate2']]; ...
- ProE常用曲线方程:Python Matplotlib 版本代码(蝴蝶曲线)
花纹的生成可以使用贴图的方式,同样也可以使用方程,本文列出了几种常用曲线的方程式,以取代贴图方式完成特定花纹的生成. 注意极坐标的使用................. 前面部分基础资料,参考:Pyt ...
- 【转载】HTTP 请求头与请求体
原文地址: https://segmentfault.com/a/1190000006689767 HTTP Request HTTP 的请求报文分为三个部分 请求行.请求头和请求体,格式如图:一个典 ...
- THREE.js代码备份——webgl - scene animation(通过加载json文件来加载动画和模型)
<!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - sc ...
- Python 之pygame飞机游戏
import pygame from pygame.locals import * import time import random # 我机 class HeroPlane(object): de ...
- 移动端rem布局 js
// rem布局适配 (function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in ...
- C++ 语言总结
蒋贵良课程时间:标准C++(11天)QT(8天)=======================<C++程序设计原理与实现><C++ Primer>=============== ...