mysql的定时任务学习

来源:互联网 发布:怎么做网络营销 知乎 编辑:程序博客网 时间:2024/05/22 07:40

最近弄公司的一个电商项目时遇到客户的一个需求:每天定时返还会员红包。这个电商项目,用的是ecshop的框架。由于ecshop是项目单一入口的mvc框架,我就想着在项目的入口文件index.php处触发windows定时任务。

大致思路是这样的:每天定时去访问入口文件,在入口文件中判断访问的时间,如果满足条件,则发放红包,并把红包发放状态修改为已发放。再建立一个文件,用于每天红包发放状态的重置操作。

思路有了就开始动手做,首先代码实现,接着在一个服务器上编写windows的定时任务。测试一下,OK,大功告成。紧接着就是给项目经理说,红包自动返功能已经实现,上线,再次测试,最后就是告知客户,红包自动返功能已经实现。

在这里我要先说明一下,我这里是采用windows定时任务+.php程序定时访问页面实现的红包自动返功能。

不料第二天早上刚来就接到了客户的电话,今天的红包怎么没返啊?

我第一感觉就是不应该啊,本地和远程测试都没问题啊。我首先看了下远程的定时任务,正常执行了,程序中设置的时间也OK,那是什么问题呢?仔细想了一下,会不会是DNS解析出了问题?因为是两个不同的服务器(项目所在的服务器与建立的定时任务并不在一个服务器上),域名解析为ip地址的时间太长,导致失败。

于是,我又换了一种思路:在电商项目的服务器上建立定时任务,这次,我没采用域名访问(当然也可以设置服务器上的hosts文件,省去域名解析过程),而是直接采用了localhost访问。心想着,这次应该没问题了吧?测试,上线。不料第二天客户又反馈说红包没发放。

这次是彻底崩溃了,定时任务执行正常,还能是什么问题?莫非是数据库服务器的问题?在这里说明一下,我们采用的是mysql数据库。

事到如今,只有一种方法能够保证功能的稳定了:在mysql数据库中创建定时任务,这样就省去了域名解析、程序与数据库的交互,只要数据库服务器正常启动着,定时任务就可以正常执行。

OK,最终解决了问题。



0 0