問題:crontab 啓動的PHP消費REDIS鍵過期通知時消息不能正常入庫
環境:PHP5.6 THINKPHP3 REDIS2.8
分析:
在SSH終端啓動PHP消費進程可以正常消費,而通過crontab 命令定時檢測消費進程是否存活的方式啓動i消費進程不能正常消費,說明問題在crontab 導致程序的運行環境出現了變化。
解決步驟:
1.在運行的關鍵部分輸出日誌,並在crontab 的對應命令後加輸出重定向 >> /home/aa.log。
2.發現消費端可以收到通知消息,但消費數據沒有入庫。
3.繼續定位,發現在過濾待處理鍵的名稱處的一處宏定義的內容與預期不符,該宏定義是服務器的IP地址的HASH值,而此時通過$_SERVER獲取的服務器IP爲空,不能拿到真實本機的IP地址,導致在過濾鍵名時被過濾。
4.將基於IP過濾改用其它過濾策略,解決。
根因:crontab運行模式下不能通過$_SERVER獲取本機IP