记录解决crontab不能定时执行php的原因

       最近开发了一个给手机客户端推送消息的功能,需求是客户端对用户进行关注后,被关注的人登录的移动设备便会收到推送的提醒消息,增加用户黏度。

        本着异步发送请求,关注用户后,不立即调用第三方推送平台的接口,而是将任务放入到消息列队中,由其他进程完成推送。这样客户端的关注动作也会及时得到相应。这时想起来crontab的任务计划。


       想着用户操作关注动作之后,信息提示发送延迟不超过3秒。便在网上查阅资料,找找crontab的任务计划详解,发现没有按秒执行的任务。网上提供了另外一种思路:写一个shell script,里面有一个循环,执行20次,每次暂停3秒钟。然后crontab的命令每分钟执行shell script。

       按照这种思路写好了shell script和crontab。发现点击关注用户操作后,线上数据库并没有改动。排查了很多方面的问题,包括shell script、crontab权限等等。最终把问题锁定到shell脚本中php的执行语句

语句如下:

php -f /data/wwwroot/default_push.php

       没有执行成功。如果换了shell向文件的输出语句,语句定时写入到文本文件中。所以排除了shell script语法错误和crontab没有执行的原因。

便在网上找解决方案:

网上有些文章提示了php环境变量的事,我按照网络上提示的一一排查,包括shell的执行权限,变量名之类的。最终确定到php -r /data/wwwroot/default_push.php的问题。将这一行替换成

/usr/local/php/bin/php /data/wwwroot/default_push.php

然后执行成功了!!!!!果然是环境变量的事情。

前面补充上php命令的完整路径。

就好了

深夜完成,特此记录。困扰了我好几天的问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • php面试题及答案(转载)收藏 基础题: 1.表单中 get与post提交方法的区别? 答:get是发送请求HTT...
    积_渐阅读 1,686评论 0 37
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,440评论 0 5
  • 文/稻草人 一场雨后的小城,变得明亮而清爽 鸽子在小城的上空肆意挥霍着自由的时光,那张开的年轻的翅膀里 藏满了年轻...
    疯狂稻草人阅读 299评论 10 9
  • 文/夕山月 回忆,从来都不可预谋。 它是环境与记忆之间产生的共鸣,是现在的你与过去的你的再次邂逅。 它可以无处不在...
    夕山月阅读 459评论 1 3
  • 生长在魔都 85后 互联网文字工作者 码字只在夜深人静时。 (1)自行车 逼仄的小屋,油漆过的底板,油条的香气,都...
    w泡饭小相公w阅读 243评论 0 1