Watcher 定时触发器编辑

定时 触发器 根据日期和时间定义何时开始监视执行。所有时间都以 UTC 时间指定。

Watcher 使用系统时钟来确定当前时间。为了确保按预期触发计划,您应该使用时间服务(如 NTP)同步集群中所有节点的时钟。

请记住,节流周期会影响监视实际执行的时间。默认节流周期为五秒(5000 毫秒)。如果您配置的计划比节流周期更频繁,则节流周期会覆盖计划。例如,如果您将节流周期设置为一分钟(60000 毫秒)并将计划设置为每 10 秒执行一次,则监视最多每分钟执行一次。有关节流的更多信息,请参阅 确认和节流

Watcher 提供了几种类型的定时触发器

Watcher 每小时计划编辑

一个 schedule,它在一天中的每个小时的特定分钟触发。要使用 hourly 计划,您需要使用 minute 属性指定您希望调度程序在何时开始监视执行的分钟(或分钟)。

如果您没有为 hourly 计划指定 minute 属性,它将默认为 0,并且计划将在每个小时的整点触发 - 12:0013:0014:00 等。

配置每小时一次的计划编辑

要配置每小时一次的计划,您需要使用 minute 属性指定一个时间。

例如,以下 hourly 计划将在每个小时的第 30 分钟触发 - 12:3013:3014:30 等。

{
  "trigger" : {
    "schedule" : {
      "hourly" : { "minute" : 30 }
    }
  }
}

配置每小时多次的计划编辑

要配置一个在每小时的多个时间触发的 hourly 计划,您需要指定一个分钟数组。例如,以下计划将在每个小时的每 15 分钟触发 - 12:0012:1512:3012:451:001:15 等。

{
  "trigger" : {
    "schedule" : {
      "hourly" : { "minute" : [ 0, 15, 30, 45 ] }
    }
  }
}

Watcher 每日计划编辑

一个 schedule,它在每天的特定时间触发。要使用 daily 计划,您需要使用 at 属性指定您希望调度程序在何时开始监视执行的每天的时间(或时间)。

时间以 24 小时制格式指定为 HH:mm。您也可以使用保留值 midnightnoon 分别表示 00:0012:00,以及 使用对象指定时间

如果您没有为 daily 计划指定 at 属性,它将默认为每天午夜 00:00 触发一次。

配置每日计划编辑

要配置每天一次的计划,您需要使用 at 属性指定一个时间。例如,以下 daily 计划将在每天下午 5:00 触发一次

{
  "trigger" : {
    "schedule" : {
      "daily" : { "at" : "17:00" }
    }
  }
}

配置每天多次的计划编辑

要配置一个在一天中的多个时间触发的 daily 计划,您需要指定一个时间数组。例如,以下 daily 计划将在每天的 00:0012:0017:00 触发。

{
  "trigger" : {
    "schedule" : {
      "daily" : { "at" : [ "midnight", "noon", "17:00" ] }
    }
  }
}

使用对象指定时间编辑

除了使用 HH:mm 字符串语法来指定时间之外,您还可以将时间指定为具有 hourminute 属性的对象。

例如,以下 daily 计划将在每天下午 5:00 触发一次

{
  "trigger" : {
    "schedule" : {
      "daily" : {
        "at" : {
          "hour" : 17,
          "minute" : 0
        }
      }
    }
  }
}

要使用对象表示法指定多个时间,您需要指定多个小时或分钟作为数组。例如,以下 daily 计划将在每天的 00:0000:3012:0012:3017:0017:30 触发

{
  "trigger" : {
    "schedule" : {
      "daily" : {
        "at" : {
          "hour" : [ 0, 12, 17 ],
          "minute" : [0, 30]
        }
      }
    }
  }
}

Watcher 每周计划编辑

一个 schedule,它在每周的特定日期和时间触发。要使用 weekly 计划,您需要使用 onat 属性指定您希望调度程序在何时开始监视执行的每周的日期和时间(或日期和时间)。

您可以通过名称、缩写或数字(以星期日为一周的第一天)来指定星期几

  • sundaymondaytuesdaywednesdaythursdayfridaysaturday
  • sunmontuewedthufrisat
  • 1234567

时间以 24 小时制格式指定为 HH:mm。您也可以使用保留值 midnightnoon 分别表示 00:0012:00

配置每周计划编辑

要配置每周一次的计划,您需要使用 on 属性指定日期,使用 at 属性指定时间。例如,以下 weekly 计划将在每周五下午 5:00 触发一次

{
  "trigger" : {
    "schedule" : {
      "weekly" : { "on" : "friday", "at" : "17:00" }
    }
  }
}

您也可以使用 daytime 属性指定日期和时间,它们与 onat 可互换。

配置每周多次的计划编辑

要配置一个在每周的多个时间触发的 weekly 计划,您可以指定一个日期和时间值的数组。例如,以下 weekly 计划将在每周二的下午 12:00 和每周五的下午 5:00 触发

{
  "trigger" : {
    "schedule" : {
      "weekly" : [
        { "on" : "tuesday", "at" : "noon" },
        { "on" : "friday", "at" : "17:00" }
      ]
    }
  }
}

或者,您可以在一个对象中指定日期和时间,该对象具有 onminute 属性,这些属性包含一个值数组。例如,以下 weekly 计划将在每周二和周五的下午 12:00 和下午 17:00 触发

{
  "trigger" : {
    "schedule" : {
      "weekly" : {
        "on" : [ "tuesday", "friday" ],
        "at" : [ "noon", "17:00" ]
      }
    }
  }
}

Watcher 每月计划编辑

一个 schedule,它在每月的特定日期和时间触发。要使用 monthly 计划,您需要使用 onat 属性指定您希望调度程序在何时开始监视执行的每月的日期和时间(或日期和时间)。

您需要将月份的日期指定为 131(含)之间的数字。时间以 24 小时制格式指定为 HH:mm。您也可以使用保留值 midnightnoon 分别表示 00:0012:00

配置每月计划编辑

要配置每月一次的计划,您需要使用 onat 属性指定一个日期和时间。例如,以下 monthly 计划将在每个月的 10 日中午触发

{
  "trigger" : {
    "schedule" : {
      "monthly" : { "on" : 10, "at" : "noon" }
    }
  }
}

您也可以使用 daytime 属性指定日期和时间,它们与 onat 可互换。

配置每月多次的计划编辑

要配置一个在每个月的多个时间触发的 monthly 计划,您可以指定一个日期和时间值的数组。例如,以下 monthly 计划将在每个月的 10 日下午 12:00 和 20 日下午 5:00 触发

{
  "trigger" : {
    "schedule" : {
      "monthly" : [
        { "on" : 10, "at" : "noon" },
        { "on" : 20, "at" : "17:00" }
      ]
    }
  }
}

或者,您可以在一个对象中指定日期和时间,该对象具有 onat 属性,这些属性包含一个值数组。例如,以下 monthly 计划将在每个月的 10 日和 20 日的凌晨 12:00 和下午 12:00 触发。

{
  "trigger" : {
    "schedule" : {
      "monthly" : {
        "on" : [ 10, 20 ],
        "at" : [ "midnight", "noon" ]
      }
    }
  }
}

Watcher 每年计划编辑

一个 schedule,它在每年的特定日期和时间触发。要使用 yearly 计划,您需要使用 inonat 属性指定您希望调度程序在何时开始监视执行的每年的月份、日期和时间(或月份、日期和时间)。

您可以通过名称、缩写或数字来指定月份

  • januaryfebruarymarchaprilmayjunejulyaugustseptemberoctobernovemberdecember
  • jan, feb, mar, apr, may, jun, jul, aug, sep, oct, novdec
  • 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1112

您将月份中的日期指定为 131(含)之间的数字。时间以 24 小时制格式指定为 HH:mm。您还可以使用保留值 midnightnoon 分别代表 00:0012:00

配置年度计划编辑

要配置每年一次的计划,您需要使用 in 属性指定月份,使用 on 属性指定日期,使用 at 属性指定时间。例如,以下 yearly 计划每年 1 月 10 日中午触发一次

{
  "trigger" : {
    "schedule" : {
      "yearly" : { "in" : "january", "on" : 10, "at" : "noon" }
    }
  }
}

您也可以使用 monthdaytime 属性指定月份、日期和时间,它们分别与 inonat 可互换。

配置每年多次的计划编辑

要配置每年触发多次的 yearly 计划,您可以指定月份、日期和时间的数组。例如,以下 yearly 计划每年触发两次:1 月 10 日中午和 7 月 20 日下午 5:00。

{
  "trigger" : {
    "schedule" : {
      "yearly" : [
        { "in" : "january", "on" : 10, "at" : "noon" },
        { "in" : "july", "on" : 20, "at" : "17:00" }
      ]
    }
  }
}

或者,您可以在包含 inonminute 属性的对象中指定月份、日期和时间,这些属性包含一个值的数组。例如,以下 yearly 计划在 1 月 10 日、1 月 20 日、12 月 10 日和 12 月 20 日的凌晨 12:00 和下午 12:00 触发。

{
  "trigger" : {
    "schedule" : {
      "yearly" : {
        "in" : [ "jan", "dec" ],
        "on" : [ 10, 20 ],
        "at" : [ "midnight", "noon" ]
      }
    }
  }
}

Watcher cron 计划编辑

使用 schedule 定义一个 cron 表达式,该表达式指定何时执行监视器。

虽然 cron 表达式功能强大,但定期发生的计划更容易使用其他计划类型进行配置。如果您必须使用 cron 计划,请确保使用 elasticsearch-croneval 验证它。

配置一次性 cron 计划编辑

要配置 cron 计划,您只需将 cron 表达式指定为字符串值。例如,以下代码段配置了一个每天中午触发的 cron 计划

{
  ...
  "trigger" : {
    "schedule" : {
      "cron" : "0 0 12 * * ?"
    }
  }
  ...
}

配置多次 cron 计划编辑

要配置多次触发的 cron 计划,您可以指定一个 cron 表达式的数组。例如,以下 cron 计划在工作日每隔一分钟触发一次,在周末每隔一分钟触发一次

{
  ...
  "trigger" : {
    "schedule" : {
      "cron" : [
        "0 0/2 * ? * MON-FRI",
        "0 1-59/2 * ? * SAT-SUN"
      ]
    }
  }
  ...
}

使用 croneval 验证 cron 表达式编辑

Elasticsearch 在 $ES_HOME/bin 目录中提供了一个 elasticsearch-croneval 命令行工具,您可以使用它来检查您的 cron 表达式是否有效并产生预期结果。

要验证 cron 表达式,请将其作为参数传递给 elasticsearch-croneval

bin/elasticsearch-croneval "0 0/1 * * * ?"

Watcher 间隔计划编辑

一个 schedule,它以固定的时间间隔触发。间隔可以设置为秒、分钟、小时、天或周

  • "Xs" - 每 X 秒触发一次。例如,"30s" 表示每 30 秒触发一次。
  • "Xm" - 每 X 分钟触发一次。例如,"5m" 表示每 5 分钟触发一次。
  • "Xh" - 每 X 小时触发一次。例如,"12h" 表示每 12 小时触发一次。
  • "Xd" - 每 X 天触发一次。例如,"3d" 表示每 3 天触发一次。
  • "Xw" - 每 X 周触发一次。例如,"2w" 表示每 2 周触发一次。

如果您没有指定时间单位,则默认为秒。

间隔值不同于 Elasticsearch 中使用的标准 *时间值*。您无法以毫秒或纳秒为单位配置间隔。

配置间隔计划编辑

要配置 interval 计划,您需要指定一个表示间隔的字符串值。如果您省略时间单位 (s,m, h, dw),则默认为秒。

例如,以下 interval 计划每五分钟触发一次

{
  "trigger" : {
    "schedule" : {
      "interval" : "5m"
    }
  }
}