PHP定时任务别靠用户访问触发,一周没用户来任务根本不跑,crontab才是最稳的

9年前 (2017-12-30)阅读1回复0
genmulu
genmulu
  • 管理员
  • 注册排名1
  • 经验值27950
  • 级别管理员
  • 主题5590
  • 回复0
楼主

新手做PHP项目,想实现每天凌晨自动备份数据库、自动发邮件,就把定时逻辑写在PHP文件里,等用户访问页面的时候触发,结果用户不来,任务一周都没跑一次,完全失效。PHP定时任务正确实现,就几个核心点,别在代码里搞花活。第一,别在用户请求里触发定时任务,用Linux系统的crontab计划任务,直接在服务器上配,每天凌晨自动执行你写的PHP脚本,不管有没有用户访问,任务都会跑;第二,定时任务的脚本,要加锁机制,比如一个脚本要跑10分钟,crontab每分钟触发一次,会导致同时跑好几个相同任务,数据库直接被锁,用文件锁,脚本运行的时候锁文件存在,第二次触发直接退出,等任务跑完再执行下一次;第三,定时任务的错误日志,单独存到文件里,别让任务悄悄失败,比如数据库备份脚本失败了,你不知道,哪天要备份的时候发现根本没备份成功,日志里要记清楚每次执行的成功失败原因;第四,别在定时任务里写死路径,脚本里的文件路径用绝对路径,不然crontab执行的时候找不到相对路径的文件,任务直接报错。

我之前做自动备份功能,把备份逻辑写在用户访问的时候触发,结果一周没几个用户访问,备份任务一次都没跑,后来改成crontab定时执行,每天自动跑,再也没出过问题。很多新手觉得定时任务就是在代码里加个判断时间的逻辑,根本不对,没有用户访问的话,你的代码永远不会被执行,用系统crontab才是最稳的方式。

本站源码来源于网络收集修改或者交换,甚至可能并非原创,如遇未经考证信息需持审慎态度。若有疑问,可联系本站处理。

本文地址:https://www.genmulu.cn/genmulu/3401.html

0
回帖

PHP定时任务别靠用户访问触发,一周没用户来任务根本不跑,crontab才是最稳的 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息