我需要设置芹菜crontab在月底运行,甚至在月末(28~31)的不同日期运行。 我知道如何在shell命令上设置crontab在月末运行,如下所示:
55 23 28-31 * * /usr/bin/test $( date -d '+1 day' +%d ) -eq 1 && exec something
但就芹菜时间表而言,我不知道如何进行此设置。
有没有办法安排在月底运行芹菜的任务?
似乎只能在is_due
上覆盖celery.schedules.crontab
方法。
答案 0 :(得分:1)
如果您不介意一些开销 - 您可以将任务设置为每天在CELERYBEAT_SCHEDULE中运行。
然后在任务本身中,您可以检查该日是否是该月的最后一天:
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 :(得分:0)
芹菜附带一个module就可以了。
从命令行运行它的方法就像这样
celery -A $project_name beat
通常情况下,您会使用worker
代替beat
然后在celery_config.py
中加入CELERYBEAT_SCHEDULE
的定义。像这样的东西
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
}
}