php在crontab下执行,什么条件下自动结束运行

现在我的项目中有个需求,需要发送一万多条短信,所以就写了个定时器。但是发现执行一次最多只能发送400条,这个是什么原因?或者你们在项目中是如何处理这种需求的?另外问一下php在crontab请求下运行会不会出现运行超时或者超出脚本限制的内存

回复
阅读 2k
2 个回答

第一个问题:

  1. 先排除程序原因,程序中打日志或查看PHP日志
  2. 再找找crontab日志,找到原因

第二个问题:
长期业务需求,一般用队列处理比较合适,临时需求,比如你提到的crontab,也可以模拟队列,比如你的程序每秒执行一次,每次发送10条短信

第三个问题:
crontab执行PHP脚本受PHP配置文件中的超时时间和内存约束影响,crontab本身不会做限制

如果发现每次执行只能发送400多条,那么有可能是php脚本执行超时了。

可以在php代码中设置脚本超时时间。

set_time_limit(0);

上面代码意为代码执行时间无限长。

还有一个问题需要注意:
如果一个任务脚本执行的时间太长,会造成任务冲突。比如你现在的发送短信一样,假设设置的脚本是一分钟执行一次,如果前一个任务没执行完毕,第二个任务脚本已经启动了,那就有可能会造成短信“重发”的现象。
具体可在crontab命令设置锁

flock -xn /tmp/test.lock -c "php /home/app/sms.php"

具体参考文章https://learnku.com/articles/...

甚至可以把脚本执行错误输出至某个日志文件,命令如下:

flock -xn /tmp/test.lock -c "php /home/app/email.php" >> /home/log/laravel.log 2>&1

2>&1表示将标准错误输出重定向到标准正确输出。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏