计划如何被触发?
日历模式
不依赖其他信息,根据当日日期就能直接判断是否符合的
第一种,重复型的
第二种,单次型的,在执行之后会删除任务
一个快捷方式适用于“每天”
支持用列表指定多个日期
需要注意,用 on 时,如 on: [Sat, Sun],匹配任意一个日期,就会把该触发器移除。如果想只删除对应的,可以将 on 作为多个独立的触发器。
触发器示例
重复型:
- 每年的 6 月 12 日:
every: 6-12 - 每周三:
every: Wednesday或every: Wed或every: 周三或every: 星期三 - 每月的 15 日:
every: 15 - 八月的每一天:
every: August或every: Aug或every: 八月
单次型:
- 在 7 月 15 日:
on: 7-15 - 在下次的 5 号:
on: 5 - 在 2025 年 8 月 26 日:
on: 2025-8-26,其实every: 2025-8-26也只会输出一次,不同之处在于它不会自动删除
需要注意的是,如果指定 31 号,但是当月没有这一天,则在月底不会触发,该模式是严格遵守指定的日期的。
农历日期
相比公历,需要在日期前加“农历”二字,如果指定的是闰月,则还需要在最后增加“闰”字
也可以加上空格
另外,every 后面还可以跟二十四节气
公历重复模式
根据相对描述决定任务日期。
以月和年为周期,以周和天为单位指定日期。
- 指定起始日期:
from: 2025-11-19,必须包含年份,如果省略几月,就视作 1 月,如果再省略几号,就视作 1 号。有些情况下,这个参数可以省略,比如每月,每年这种。 - 指定一个周期:可以是每几天、每几周、每几月、特定月份、每几年,
every: 3week、every: 2month、every: June、every: year。 - 指定某一天,可以用第几天或周几描述,如:第三天
on: 3d、倒数第一天on: -1day或last: day、第一个星期一on: Monday、倒数第一个星期五on: -Fri或last: Fri,
每月/年的某一天
每月第一个星期一
每月倒数第二天
每月最后一个星期六
每月倒数第二个星期六
每个六月的最后一个星期六
每年最后一个星期六
每若干天/周/月/年
没有 on 或 last,会把 from 作为第一天,每经过一次 every 就被触发一次。下面举例说明。
每 16 天一次,会在 2025-8-11、2025-8-27、2025-9-12 ... 触发
每 3 周一次,会在 2025-11-21、2025-12-12 ... 触发
每 2 月一次,会在 2025-11-21、2026-1-21 ... 触发
每 2 年一次,会在 2025-11-21、2027-11-21 ... 触发
如果是一年一次,可以直接用
every: 11-21实现
需要注意的是,假如 from 是某月的 31 号,下一次的月份可能没有 31 号,此时,会在下一次的月份的最后一天触发,比如 30 号就被触发。
每若干天/周/月/年的某一天
从 2025 年 11 月 21 日起,每三周中的第一周的周三。也就是会在 11 月 19 号(但已经过去)、 12 月 10 号被触发
从 2025 年 8 月起,每两个月中的第一个月的倒数第七天。也就是会在 8 月 25 号、 10 月 25 号被触发
从 2025 年开始,每两年中的第一年的第三天运行
这里 from 指定的日期不必精准到天,如果周期是年,到年就行,周期是几天,就精确到天。特殊的是,周期是周的话,可以指定开始周中的任意一天,都将表示那一周。
另外,这里有一个限制,只会从每若干周中的第一周、每若干月中的第一个月这样的,第一个里面去找,如果想要在第二个里面去找,可以更改 from 的日期,调整为从第一个里面去找。
依赖模式
关键词有 if, after 和 before 。if 后面跟 tag ,可以用 and 和 or 指定多个条件。after 和 before 后面跟时长,可以是天或周:2d、Sat,可以同时使用 after 和 before。
希望计划 B 随计划 A 触发,或者计划 B 在计划 A 之前或之后的某一天被触发,这种关系可以表述为计划 B 的触发依赖计划 A 的触发。
首先,在计划 A 添加一个 tag
要实现同时触发,只需要用 if 跟 tag
计划 A 触发后的第 2 天(1-13)
计划 A 触发前的第 6 天(1-5)
计划 A 触发前的第 1 个星期六(不含当天,1-4)
计划 A 触发前的第 2 个星期六(12-28)
如果计划的时间不确定,比如将来支持在下雨天触发,这种情况下,依赖这个计划的其他计划不能保证被触发。
复合模式
如果一个计划有多种触发条件,可以把所有触发器放在一个列表里。
每周六和月末周日触发该计划
要注意的是,如果计划里使用了 trigger,就不能再把触发器放在顶层,下面这样是非法的
触发器之间的关系
上面是触发器中任意一个满足即会触发,这是“或”关系。
如果需要所有触发模式都满足,也就是“与”关系,可以这样指定。
以“每月最后一日,且该日是周六的情况下”为例:
除了某一天
关键词为 except ,后面跟 tag 和日历模式的内容,支持列表。
当满足 except 时,该计划不会被触发,即便该计划的触发器也有满足的。
后面可以跟 tag 和日历模式的内容。
延迟执行
关键词为 delay_if ,后面跟 tag 和日历模式的内容,支持列表。
当计划已经被触发,但是 delay_if 同时被满足,那么本次会抑制该计划的触发。该计划会在下一次 delay_if 不满足时立刻执行,并会提示被延期了。
举例说明。如果周六要工作就推迟到明天