从特定时区的给定日期起每 14 天执行一次作业的 Cron 脚本
Posted
技术标签:
【中文标题】从特定时区的给定日期起每 14 天执行一次作业的 Cron 脚本【英文标题】:Cron Script to execute a job every 14 days from a given date in specific time zone 【发布时间】:2021-06-26 00:53:42 【问题描述】:我想从特定日期和时区开始每 14 天在 CRON 中执行一次作业。
例如从 6 月 24 日开始,CST 时区每 14 天一次。
【问题讨论】:
请添加更多上下文以及到目前为止您尝试了什么 您可以运行一个存储过程来每周运行并检查最后一次运行时间 6 月 24 日是否应该提前 14 天来调用您的脚本,否则跳过那个。伪代码if current_date == select dateadd (day , 14 , '24 june') invoke your script else skip
【参考方案1】:
每两周运行一次工作
简单的方法
执行此操作的最简单方法是创建任务,从您希望它首次运行开始每 14 天运行一次,如下所示:
CREATE TASK mytask_fortnightly
WAREHOUSE = general
SCHEDULE = '20160 MINUTE'
AS
SELECT 'Hello world'
工作原理
因为一小时有 60 分钟,一天有 24 小时,两周有 14 天,所以是 20,160 分钟。
警告
上述解决方案不是从给定日期/时间每两周运行一次任务,而是从创建任务后每两周运行一次。
尽管这是最简单的方法,但它确实需要您名义上在场,以便在下一次计划的确切时间创建任务。
但是,作为一种解决方法,您可以创建一次性任务,以便在准确的日期/时间第一次为您执行此操作。这意味着您不必记住要醒来/提醒/出席自己手动执行此操作,并且您可以在之后清理创建任务。
更难的方法。
其他解决方案将要求您创建一个每周四运行的任务(因为 2021 年 6 月 24 日是/曾经是星期四,接下来的每个星期四将是休息周或两周)
例如SCHEDULE = 'USING CRON 0 0 * * THU'
然后您将为其添加特定逻辑以确定正确的两周是哪一个。
使用此方法还会产生非周的执行成本,以确定它是否是正确的一周。
javascript SP
在 javascript 中,您可以通过从当前日期中减去开始日期来确定它是否是正确的星期,如果它不是 14 天的倍数,则将其用作使 SP 短路的条件。
const deltaMs = (new Date) - (new Date('2021-06-24'));
const deltaDays = ~~(deltaMs / 86400000);
const run = deltaDays % 14 === 0;
if (!run) return;
// ... continue to do what you want.
SQL
您还可以在WHERE
子句或IFF
/ CASE
函数中使用以下SQL 条件检查是否为两周。
DATEDIFF('day', '2021-06-24', CURRENT_DATE) % 14 = 0
【讨论】:
以上是关于从特定时区的给定日期起每 14 天执行一次作业的 Cron 脚本的主要内容,如果未能解决你的问题,请参考以下文章