上个月有个需求,用PHP写了一个接口给SDK使用,原始数据使用MySQL进行记录。热数据用Redis进行+1的原子操作。每隔一定时间,由一个PHP脚本(姑且就命名为cron.php)把Redis中的数据取出,放入MySQL中,并销毁Redis中的数据。
计划总是美好,现实总是残酷。
cron.php通过浏览器访问,很正常,可以捕获到Redis中的数据,并顺利写入到MySQL中。
然而,通过crontab设置定时执行cron.php后,却总是出错。
Google之后发现,通过CLI模式运行PHP,有可能不加载php.ini文件。
我的PHP支持Redis操作,是通过给PHP外挂第三方库实现的,运行的时候,必须要加载php.ini,但是我安装PHP的时候,因为不是在干净的系统上装的,某些原因导致我运行PHP必须手动加载php.ini。
So,最终解决的方法就是:
/usr/local/php/bin/php -c /usr/local/php/lib/php.ini /usr/local/nginx/html/pj1/cron.php
执行PHP-CLI的时候,加上-c参数,手动加载php.ini文件即可。
PS:我没怎么研究过Shell,用php-cli也不错呀~~