首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我如何使用在月底运行的芹菜计划任务?

我如何使用在月底运行的芹菜计划任务?
EN

Stack Overflow用户
提问于 2015-06-22 11:04:03
回答 2查看 2.1K关注 0票数 3

我需要设置芹菜crontab在月底运行,甚至不同于月底的日期(28~31)。我知道如何在shell命令中设置crontab在月底运行,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
55 23 28-31 * * /usr/bin/test $( date -d '+1 day' +%d ) -eq 1 && exec something

但是在芹菜时间表上,我不知道怎么做这个设置。有没有办法在芹菜上安排月底运行的任务?

似乎唯一的方法就是覆盖celery.schedules.crontab上的is_due方法。

EN

回答 2

Stack Overflow用户

发布于 2017-10-04 11:51:59

如果你不介意开销的话--你可以在CELERYBEAT_SCHEDULE中设置每天运行的任务。

然后在任务本身中,您可以检查这一天是否是该月的最后一天:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import calendar
from datetime import datetime

@task
def task_to_run_at_end_of_month():
    today = datetime.today()
    day_in_month = today.day
    month = today.month
    year = today.year
    day_of_week, number_of_days_in_month = calendar.monthrange(year, month)
    if day_in_month != number_of_days_in_month:
        # not last day of month yet, do nothing
        return
    # process stuff on last day of month
    ...
票数 1
EN

Stack Overflow用户

发布于 2015-06-23 06:44:28

Celery附带了一个module,它就可以做到这一点。

从命令行运行它的方法如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
celery -A $project_name beat

通常您会使用worker而不是beat

然后在您的celery_config.py中包含CELERYBEAT_SCHEDULE的定义。像这样的东西

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
        "end_of_month_task": {
            "task": "module.task_name", # this is the task name
            "schedule": crontab(0, 0, day_of_month=0),
            "args": the_arguments_to_this_function
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30978329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文