最近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二三事的更多相关文章

  1. Emacs 启动优化二三事

    Emacs 启动优化二三事 */--> div.org-src-container { font-size: 85%; font-family: monospace; } p {font-siz ...

  2. WinForm二三事(三)Control.Invoke&Control.BeginInvoke

    http://www.cnblogs.com/yuyijq/archive/2010/01/11/1643802.html 这个系列从2009年写到2010年,差点又成太监文.随着WPF/Silver ...

  3. Java并发编程二三事

    Java并发编程二三事 转自我的Github 近日重新翻了一下<Java Concurrency in Practice>故以此文记之. 我觉得Java的并发可以从下面三个点去理解: * ...

  4. linux杂记(十二?) 关于账号和密码的二三事

    关于密码的二三事 关于账号和密码的二三事 久了不更linux的相关知识,实在是懒得想内容点(纯粹是懒).那么今天就来谈谈关于linux密码和账号的重要概念. 假如你的主机遭到入侵,那么对方的第一个侵入 ...

  5. MySQL5.7关于密码二三事

    MySQL5.7关于密码二三事 第一个:update user set password=password('root') where user='root' and host='localhost' ...

  6. Java中的匿名内部类及内部类的二三事

    匿名内部类适合创建那些只需要使用一次的类,它的语法有些奇怪,创建匿名内部类会立即创建一个该类的实例,这个类定义立即消失,且不能重复使用. 定义匿名类的格式如下: new 实现接口() |父类构造器(实 ...

  7. iOS7下滑动返回与ScrollView共存二三事

    [转载请注明出处] = =不是整篇复制就算注明出处了亲... iOS7下滑动返回与ScrollView共存二三事 [前情回顾] 去年的时候,写了这篇帖子iOS7滑动返回.文中提到,对于多页面结构的应用 ...

  8. 一只代码小白git托管路上的二三事

    [经验]一只代码小白git托管路上的二三事 写在前面的话 寒假的时候,娄老师给我们布置了代码托管的作业,并要求把托管地址发给学委.因假期的时候没有带电脑回家,所以只是在手机上草草注册了,也稀里糊涂就将 ...

  9. YTU 1008: 童年生活二三事

    1008: 童年生活二三事 时间限制: 1000 Sec  内存限制: 64 MB 提交: 842  解决: 592 题目描述 Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去. ...

随机推荐

  1. ACM_寻找第N小序列

    寻找第N小序列 Time Limit: 2000/1000ms (Java/Others) Problem Description: Now our hero finds the door to th ...

  2. android 二维码 扫描,生成,竖屏

    最近公司有用到二维码,生成,扫描,所以学习了一下,和大家分享: demo 见下面链接,已经改成竖屏: http://download.csdn.net/detail/q610098308/868101 ...

  3. [转]通过Net Manager 配置Oracle 11g本地监听服务(listener service)

    本文转自:http://blog.csdn.net/mozart_cai/article/details/8596504 [Target] 通过ip address 监听orcl服务,而不是通过loc ...

  4. 在Django中使用redis:包括安装、配置、启动。

    一.安装redis: 1.下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 tar -zxvf redis-.tar ...

  5. [Android]异常7-Error:Configuration with name 'default' not found.

    背景:使用SVN更新代码,运行出现 异常原因: 可能一>缺少Modules 解决办法有: 解决一>Android Studio切换为Project,settings.gradle中引用和现 ...

  6. cmd 切换目录和配置环境变量

    记录一下: 在用cmd进行切换盘符的时候, 如果是从 C盘切换到其他盘的话: D:直接回车就行了. 如果是在同一个盘符内切换文件夹的话,cd D:\ComputerSoft\curl\curl-7.6 ...

  7. microsoft ajax registered - to fix microsoft ajax update panel post back

    <dnn:DnnScriptBlock runat="server">     <script type="text/javascript"& ...

  8. 2015.12.20-2015.12.25 大论文迭代 A

    进一步充实大论文内容.结构,完善一遍大论文 12.20周天,完成论文第五章总结部分,和第一章的修改 12.21周一,完成论文第二章的修改充实 12.22周二,完成论文第三章的修改充实 12.23周三, ...

  9. XML在线转化为JSON

    http://www.utilities-online.info/xmltojson/

  10. CAD创建一个新的图形文件

    static void linea(void) { AcDbDatabase *pDb = new AcDbDatabase(true, false); AcGePoint3d pickPoint; ...