最近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. 题解报告:hdu 1846 Brave Game(巴什博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1846 Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片, ...

  2. jsp文件就是Servlet,可以在tomcat里进行查看

    D:\apache-tomcat-8.0.21\work\Catalina\localhost\springmvc2\org\apache\jsp\index_jsp.class

  3. jsp之认识 servlet (基础、工作原理、容器请求处理)

    Tomcat 的安装: eclipse 需要自行安装tomcat,这是web 项目运行的服务器.如果用的是MyEclipse,里面自带tomcat,方便清除部署垃圾,利于项目运行. Tomcat的安装 ...

  4. JS高级——浏览器的线程

    基本概念 1.js的执行过程是单线程的模式,也就是同步进行,只有前面的代码执行完了才会往下面执行 2.但是执行js代码也只是浏览器的线程之一所负责的事情,这个线程被称为js引擎,浏览器还具有其他线程: ...

  5. SQL基本操作——通配符

    SQL 通配符:在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符.SQL 通配符必须与 LIKE 运算符一起使用.在 SQL 中,可使用以下通配符: 通配符 描述 % 替代一个或多个字符 ...

  6. linux搭建mysql服务器及可视化工具

    环境: ubutnu 18.4 mysql 5.7 参考: 安装 https://www.cnblogs.com/opsprobe/p/9126864.html 配置用户权限 https://baij ...

  7. spring boot 2.0 报错:“jdbcUrl is required with driverClassName.” 解决办法!

    springboot 升级到2.0之后发现配置多数据源的时候报错: "jdbcUrl is required with driverClassName."或者Cause: java ...

  8. SQL With As 用法Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

    Sql 四大排名函数(ROW_NUMBER.RANK.DENSE_RANK.NTILE)简介   排名函数是Sql Server2005新增的功能,下面简单介绍一下他们各自的用法和区别.我们新建一张O ...

  9. 使用No-Conflict模式,其实就是对jQuery进行重命名,再调用。

    <script type="text/javascript" src="/jquery/jquery.js"></script>< ...

  10. JavaScript day4(条件语句和条件运算符)

    1. 布尔值 布尔值要么是 true 要么是 false .它非常像电路开关, true 是“开”,false 是“关”.这两种状态是互斥的. 2. if 语句 if 语句用于在代码中做条件判断.关键 ...