从特定时区的给定日期起每 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 脚本的主要内容,如果未能解决你的问题,请参考以下文章

在特定时区的一天开始时获取时间对象

Retrive在一个价格范围从PHP阵列匹配到特定日期数据

每三天进行一次 Cron 作业

Cron 作业每 x 周和特定日期运行一次 [关闭]

如何使用 MQ 的 esql 将日期的特定时区转换为 GMT 时区?

如何在给定日期前 14 天避免假期