事件
23日晚公司app分发奖励,后台设置错误,导致23:00到23:22期间内,原本只分发一次的奖励,每分钟重复分发,多分发了21份奖励,导致损失10k余元。
分析
定时任务使用celery写的,第一个想到的是celerybeat没有重启,重启celerybeat之后,状况仍然存在,要炸。打开代码分析,找到原因。删除redis队列的信息,重启,ok。
原因
#代码
'daily-reward':
{
'task': 'running.tasks.daily_reward',
'schedule': crontab(hour='23'),
'args': (),
},
原因出在schedule此时设置的是hour=23,会导致在23时每分钟都会重复任务。正确的写法是
'schedule': crontab(minute=0, hour='23',
尾声
归根结底是自己对celery的掌握不够到位,导致这次损失,引以为戒,不说了,吃土去了。