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