当我们谈论任务调度时,cron(Cron表达式)是一种非常常见和常用的方式。它是一种用于在特定时间间隔内定期执行任务的调度表达式。cron表达式由6个字段组成,分别代表分钟、小时、日期、月份、星期几和要执行的命令或脚本。
下面是cron表达式的每个字段的含义:
0 9 * * * command
- 分钟(0-59):表示每小时的第几分钟执行任务。
- 小时(0-23):表示每天的第几个小时执行任务。
- 日期(1-31):表示每月的第几天执行任务。
- 月份(1-12):表示每年的第几个月执行任务。
- 星期几(0-7,其中0和7都表示星期日):表示每周的第几天执行任务。
- 命令或脚本:表示要执行的命令或脚本。
举个例子,如果我们想要在每天的上午9点执行一个脚本,我们可以使用以下的cron表达式:
0 9 * * * command
这个表达式的含义是:在每天的第0分钟(即整点)的第9小时执行任务。
另一个例子,如果我们想要在每周一的下午2点执行一个命令,我们可以使用以下的cron表达式:
0 14 * * 1 command
这个表达式的含义是:在每天的第0分钟(即整点)的第14小时执行任务,并且只在星期一执行。
使用cron表达式可以实现非常精确的任务调度,可以根据自己的需求设定任务的执行时间。在使用cron表达式时,需要注意的是,cron表达式的语法是固定的,每个字段之间使用空格分隔,不同字段之间的取值范围也是固定的。
进阶
当然!除了基本的cron表达式语法,还有一些进阶的用法和技巧可以帮助你更好地使用cron任务调度。
-
通配符和范围:在cron表达式中,你可以使用通配符()来表示一个字段的所有可能取值。例如,如果你想要在每小时的所有分钟执行任务,你可以使用来表示分钟字段。另外,你也可以使用范围(例如1-5)来指定字段的取值范围。
-
递增值:除了通配符和范围,你还可以使用递增值(/)来指定字段的间隔。例如,如果你想要每隔5分钟执行一次任务,你可以使用*/5来表示分钟字段。
-
列表和逗号:你可以使用逗号(,)来指定一个字段的多个取值。例如,如果你想要在每天的上午9点和下午2点执行任务,你可以使用0 9,14 * * * command来表示小时字段。
-
特殊字符:cron表达式中还有一些特殊字符可以帮助你更灵活地定义任务调度。例如,你可以使用?来表示不关心的字段,使用L来表示某个字段的最后一个取值,使用W来表示最近的工作日,使用#来表示某个月份的第几个星期几。
-
时间段和时间间隔:除了单个字段的取值,你还可以使用时间段(例如9-17)和时间间隔(例如0/5)来指定多个字段的取值。例如,如果你想要在每天的工作时间(上午9点到下午5点)每隔10分钟执行一次任务,你可以使用0 9-17/10 * * * command来表示。
基于频率的间隔
cron表达式受限:
cron表达式的一个重要限制是它们不能表示某些基于频率的调度。例如,如何定义每三天运
行一次DAG的cron表达式?
timedelta 模块
要使用这样一个基于频率的调度,可以传递一个
timedelta实例(来自标准库中的datetime模块)作为调度间隔。
dag = DAG(
dag_id=“04_time_delta”,
schedule_interval=dt.timedelta(days=3),
start_date=dt.datetime(year=2019,month=1,
day=1),end_date=dt.datetime(year=2019,month=1,
day=5),
# timedelta给出了使用基于频率的调度的能力。
)
标签:cron,执行,Cron,字段,使用,任务调度,表达式
From: https://www.cnblogs.com/babyfengfjx/p/18191317