用户指定时间的 Django cron-job

Posted

技术标签:

【中文标题】用户指定时间的 Django cron-job【英文标题】:Django cron-job for user-specified times 【发布时间】:2016-03-19 12:46:16 【问题描述】:

我想根据用户指定的时间发送通知。 IE,在谷歌日历中,当我的任务时间到达时,我可以收到一条短信。

解决方案是运行一个 cron 作业,让它每分钟执行一次并扫描哪些用户的时间等于当前时间?

【问题讨论】:

【参考方案1】:

由于您使用celery 标记了您的问题,我假设您正在运行芹菜。您可以使用 eta kwarg 到 apply_async() 来安排任务在特定时间运行,请参见此处:

http://docs.celeryproject.org/en/latest/userguide/calling.html#eta-and-countdown

如果您需要使用 cron 作业,我不会检查 notification_time == current_time,而是使用模型上的布尔值 is_sent 字段跟踪未发送的通知并检查 notification_time <= current_time and not is_sent。这似乎不太容易出错。您还可以添加某种形式的检查,以防止在您的系统停机几个小时时大量发送通知。

【讨论】:

以上是关于用户指定时间的 Django cron-job的主要内容,如果未能解决你的问题,请参考以下文章

apache 特定的 cron-jobs 不应该在 docker 映像中运行吗?

手动将 Cron-Job 添加到池中

Django 框架中制作定时触发脚本

django apscheduler 定时任务(下篇)

在django中使用celery异步任务和定时任务

Django如何在启动服务时自动运行脚本(可设置定时运行)