某业务付费统计脚本问题排查
現象:產品反饋未收到每周五的VIP郵箱付費統計郵件
1. 這個統計腳本我從未經手過,因此不知道邏輯是什么,也不知道代碼在哪里.通過查看郵件源文件中的來源IP,找到了發出郵件所在的服務器,信頭中有類似這樣的來源IP
X-Originating-IP: [xx.xx.xx.86]
2.登陸服務器后,查看crontab的定時規則,找到定時規則是0 0 * * * /bin/sh /xxx/feeUser.sh.每天都會執行一次feeUser.sh的腳本.通過cron.log可以看到該腳本已經執行過了
3.腳本中的邏輯是,每天判斷今天的日志文件是否存在,如果不存在就執行一個php腳本,把該腳本的輸出重定向到這個日志文件中.
判斷如果是周五,就調用php腳本發送一封通知郵件,郵件的內容是對每天日志文件的wc -l行數統計.
4.今天是周五但是郵件沒有發出,說明根本就沒有執行到發送郵件的邏輯.在前面的統計今天用戶付費情況時就已經斷掉了.
5.查看php.ini的配置文件,看到沒有開啟log_errors,也沒有指定error_log的位置,所以沒法通過php的日志看到發生了什么錯誤
6.此腳本是14年左右開始運行的,時間也比較久了.在研究php代碼的邏輯后發現,在查詢數據庫的時候,先查出第一個數據庫的某表信息后,循環查詢另一個數據庫的另一張表,在這個循環的過程中,連接數據庫的邏輯放在了循環塊里面,猜測可能因為連接過多,被數據庫拒絕后讀取失敗吧.
7.里面還有處邏輯挺有想法,讀取第一張表的時候,每次只查詢10000條,然后再從新連接數據庫new PDO對象,估計也是為了防止執行時間太長連接斷掉.
每天php腳本把用戶查詢出來后,重定向到比如2019-9-20-user.log,周五在統計每天的日志行數發送給產品,這樣就可以如果產品需要具體用戶時也可以留著這個結果
8.先把連接數據庫邏輯挪出來,補齊了強兩天斷掉的數據,把錯誤日志打開暫時先觀察觀察
轉載于:https://www.cnblogs.com/taoshihan/p/11558299.html
總結
以上是生活随笔為你收集整理的某业务付费统计脚本问题排查的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang学习笔记:Interface
- 下一篇: VK Cup 2017 - Round