crontab 启动的后台PHP进程在消费REDIS键过期通知时消息不能正常入库


问题: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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章