php debug二三事
最近php相關專案遇到了一些問題,處理起來讓人感覺挺有意思,寥寥記下。
1.php執行後常駐記憶體裡,需要kill掉該程序再重啟,才能讓修改後的程式碼生效。
之前有一次組裡小夥伴修改了一個長期後臺程序執行的php指令碼,增加了一些業務邏輯判斷。之後我進行部署之時一直忘記將其php程序kill掉,測試的時候一直找不到未生效的原因。後面想到了後臺持續run的指令碼是從記憶體裡面讀取的程式碼塊,而不是載入最新的程式碼指令碼。對於php我們常常腦補無需重啟(如node)或者編譯(java)直接生效,但是對於一直執行的指令碼不然。
Tips 2 如果使用ps aux | grep xxx來判斷指令碼是否執行,請儘量
又是一次後臺程序任務的新增,採用方式的是shell指令碼監控php程序並維護其始終執行。這次我因為事情比較忙,讓F君自己動手在測試服上寫好shell去執行。後面發現一直沒有成功run起來php任務。
我先嚐試了直接php命令執行php指令碼是沒問題的,排查了指令碼本身的問題。然後又仔細看了一下shell發現也沒什麼問題,最後通過對比之前的寫法,發現是因為在判斷是否有php指令碼進行的時候用的grep 不夠精準,如下圖。
很湊巧的是,F君寫的shell指令碼的名字也是new_notice,和php指令碼名撞名了。所有儘管shell裡面是while true
Tips 3 報錯要重視,框架要熟悉。
為了減少老框架的束縛,我鼓勵組內小夥伴在一些業務牽連不大的新專案中嘗試使用新的框架來做業務。今天剛好是新的統計服務部署到線上的時間,我剛部署完後,F君和我說mongo的auth failed。經過一頓baidu後,發現需要在
經過一頓猛如虎的操作,最後發現是因為專案根目錄下沒有runtime目錄造成的。一邊趕地鐵回家,一邊刷著知乎的我發誓以後一定要重視框架的細節,細節決定很多步,包括下一步。