最近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. Android中有四大组件的简单总结

    Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...

  2. Hadoop Hive概念学习系列之hive里的用户定义函数UDF(十七)

    Hive可以通过实现用户定义函数(User-Defined Functions,UDF)进行扩展(事实上,大多数Hive功能都是通过扩展UDF实现的).想要开发UDF程序,需要继承org.apache ...

  3. VS开发C语言系列(零)-VS2013写C语言错误汇总

    错误代码 error C3861:调用函数前未引用 error C4996:调用不安全的函数 error C2668:重载函数不明确 error C3861:"文件名" 找不到标识 ...

  4. Laravel5.1学习笔记11 系统架构3 服务提供者

    服务提供者 简介 写一个服务提供者 Register注册方法 Boot 方法 注册提供者 缓载提供者 简介 Service providers are the central place of all ...

  5. 使用Hexo搭建个人博客配置全过程

    大致过程分为: 1.搭建Node.js 环境 2. 搭建Git 环境 3.安装配置Hexo 4.GitHub 注册和配置 5. 关联Hexo 与 GitHub Pages 7.Hexo的常用操作 下面 ...

  6. JS——锚点的运用

    锚点的两种形式: 1.<a href="#a">点击到锚点</a> 2.window.location.hash = "#a"; 最后都 ...

  7. 64位windows系统如何显示32位dcom组件配置

    在运行栏中输入命令:dcomcnfg,打开组件服务管理窗口,但是却发现找不到Microsoft Excel程序,这主要是64位系统的问题,excel是32位的组件,所以在正常的系统组件服务里是看不到的 ...

  8. hint: not have locally. This is usually caused by another repository pushing

    git 提交代码前先pull代码,否则会报如下错误 wangju@wangju-HP-348-G4:~/test/reponselogiccheck$ git statusOn branch mast ...

  9. opencv 图像各方向旋转

    1. 简介 计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移.旋转.缩放.剪切这几种.本文以及接下来的几篇文章重点介绍一下关于旋转的变换,包括二维旋转变换 ...

  10. mybatis批量操作(foreach)

    foreach可以在SQL语句中通过拼接的方式进行集合迭代.foreach元素的属性主要有collection,item,index,separator,open,close. item属性:表示循环 ...