我在 Django 中使用 Celery,并以 Redis 作为代理。
使用 apply_async 中的 eta 参数安排未来的任务。
安排任务后,我可以运行
celery -A MyApp inspect scheduled
,我会看到该任务具有未来的正确 eta(未来 24 小时)。
在预定时间之前,如果我重新启动Redis(使用
service redis restart
)或服务器重新启动,再次运行celery -A MyApp inspect scheduled
会显示“-empty-”。
Redis重启后所有定时任务都会丢失。
Redis 采用 AOF 设置,因此重启后不应丢失数据库状态。
经过更多研究,我发现在 redis 重新启动之前和之后运行
redis-cli -n 0 hgetall unacked
都会显示队列中的任务。那么redis仍然知道该任务,但是由于某种原因,当redis重新启动时,该任务从worker中删除了?然后再也没有发送过,它只是无限期地保留在未确认队列中。
你找到解决办法了吗?