现在我的项目中有个需求,需要发送一万多条短信,所以就写了个定时器。但是发现执行一次最多只能发送400条,这个是什么原因?或者你们在项目中是如何处理这种需求的?另外问一下php在crontab请求下运行会不会出现运行超时或者超出脚本限制的内存
现在我的项目中有个需求,需要发送一万多条短信,所以就写了个定时器。但是发现执行一次最多只能发送400条,这个是什么原因?或者你们在项目中是如何处理这种需求的?另外问一下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
表示将标准错误输出重定向到标准正确输出。
2 回答1.1k 阅读✓ 已解决
3 回答654 阅读✓ 已解决
2 回答504 阅读✓ 已解决
4 回答708 阅读✓ 已解决
2 回答639 阅读✓ 已解决
4 回答690 阅读
4 回答1k 阅读
第一个问题:
第二个问题:
长期业务需求,一般用队列处理比较合适,临时需求,比如你提到的crontab,也可以模拟队列,比如你的程序每秒执行一次,每次发送10条短信
第三个问题:
crontab执行PHP脚本受PHP配置文件中的超时时间和内存约束影响,crontab本身不会做限制