php debug二三事

最近php相關項目遇到了一些問題,處理起來讓人感受挺有意思,寥寥記下。php

1.php執行後常駐內存裏,須要kill掉該進程再重啓,才能讓修改後的代碼生效。java

以前有一次組裏小夥伴修改了一個長期後臺進程運行的php腳本,增長了一些業務邏輯判斷。以後我進行部署之時一直忘記將其php進程kill掉,測試的時候一直找不到未生效的緣由。後面想到了後臺持續run的腳本是從內存裏面讀取的代碼塊,而不是加載最新的代碼腳本。對於php咱們經常腦補無需重啓(如node)或者編譯(java)直接生效,可是對於一直運行的腳本否則。node

Tips 2 若是使用ps aux | grep xxx來判斷腳本是否運行,請儘可能精準grepshell

 

又是一次後臺進程任務的添加,採用方式的是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 報錯要重視,框架要熟悉。spa

 

爲了減小老框架的束縛,我鼓勵組內小夥伴在一些業務牽連不大的新項目中嘗試使用新的框架來作業務。今天恰好是新的統計服務部署到線上的時間,我剛部署完後,F君和我說mongoauth failed。通過一頓baidu後,發現須要在tp5mongo driver實現裏面修改源碼,把MongoDB\Driver\Manager的鏈接URI最後加上database參數。嘗試添加後再也不報auth failed的錯誤,卻直接頁面顯示該網站永久性轉移。去掉後又報auth failed,對比線上和測試服的代碼和mongo擴展版本都沒有什麼問題,也曾懷疑過兩個環境的mongo sever版本問題,發現差別也不大。blog

 

通過一頓猛如虎的操做,最後發現是由於項目根目錄下沒有runtime目錄形成的。一邊趕地鐵回家,一邊刷着知乎的我發誓之後必定要重視框架的細節,細節決定不少步,包括下一步。進程

相關文章
相關標籤/搜索