在ES集群种,snapshot作为一种简单而且能够满足自动化的备份方式,通过定义SLM(快照生命周期)来实现一个自动备份的操作。且通过设置还可以管理快照的保存删除之类的操作,可以说极大的节省了运维人员的工作成本。
cron表达式
<seconds> <minutes> <hours> <day_of_month> <month> <day_of_week> [year]
所有计划均以世界时(UTC)为准,不支持其他时区。
corn表达原件
除year以外,其他所有元素都是必需的。
元素 | 性质 | 有效值 |
---|---|---|
<seconds> | 必填 | 0 -59 和特殊字符, - * / |
<minutes> | 必填 | 0 -59 和特殊字符, - * / |
<hours> | 必填 | 0 -23 和特殊字符, - * / |
<day_of_month> | 必填 | 1 -31 和特殊字符, - * / ? L W |
<month> | 必填 | 1 - 12 ,JAN - DEC ,jan -dec 和特殊字符, - * / |
<day_of_week> | 必填 | 1 - 7 ,SUN - SAT ,sun -sat 和特殊字符, - * / ? L # |
<year> | 可选 | 1970 -2099 和特殊字符, - * / |
cron特殊字符
特殊字符 | 具体使用方法 |
---|---|
* | 选择一个字段的每个可能的值。例如,* 在该hours 字段中表示“每小时”。 |
? | 没有具体值。当您不在乎值是什么时使用。例如,如果您希望计划在每月的特定日期触发,但不在乎星期几,则可以? 在 day_of_week 字段中指定。 |
- | 值的范围(含)。用于分隔最小值和最大值。例如,如果您希望时间表在上午9:00和下午5:00之间每小时触发一次,则可以9-17 在hours 字段中指定。 |
, | 多个值。用于分隔字段的多个值。例如,如果您希望时间表在每个星期二和星期四触发,则可以TUE,THU 在day_of_week 字段中指定。 |
/ | 增量。指定时间增量时用于分隔值。第一个值代表起点,第二个值代表间隔。例如,如果您希望时间表从小时的顶部开始每20分钟触发一次,则可以0/20 在minutes 字段中指定。同样,从该月的第一天开始,1/5 在 day_of_month 字段中指定将每5天触发一次。 |
L | 最后的。在day_of_month 字段中使用表示月份的最后一天-非-年的1月31日,2月的28日,4月的30日,依此类推。在day_of_week 字段中单独使用代替7 或SAT ,或在一周中的特定日期之后选择该类型在月中的最后一天。例如,6L 表示月份的最后一个星期五。您可以LW 在day_of_month 字段中指定以指定该月的最后一个工作日。L 在指定值列表或值范围时避免使用该选项,因为结果可能不会达到您的期望。 |
W | 平日 用于指定最接近给定日期的工作日(星期一至星期五)。例如,如果您15W 在day_of_month 字段中指定, 而15号是星期六,那么时间表将在14号触发。如果15日是星期日,则时间表将在16日星期一触发。如果15日是星期二,则时间表将在15日星期二触发。但是,如果您将1W 的值指定为day_of_month 且第1个是星期六,则计划将在第3个星期一触发-它不会跳过月份边界。您可以LW 在day_of_month 字段中指定以指定该月的最后一个工作日。您只能在W 当天day_of_month 是一天时使用该选项-在指定日期范围或日期列表时无效。 |
# | 一个月中的第N个XXX天。在day_of_week 字段中使用以指定每月的第XXX天。例如,如果指定6#1 ,则计划将在该月的第一个星期五触发。请注意,如果您指定3#5 并且特定月份中没有5个星期二,则计划不会触发该月份。 |
例子
设置每日触发
0 5 9 \* \* ? 每天在世界标准时间上午9:05触发。
0 5 9 \* \* ? 2020 2020年期间,每天在世界标准时间上午9:05触发。
将触发器限制在几天或者时间范围内
0 5 9 ? * MON-FRI 星期一至星期五,世界标准时间上午9:05触发。
0 0-5 9 * * ? 从UTC上午9:00开始到UTC每天9:05结束,每分钟触发一次。
设置间隔触发
0 0/15 9 * * ? 从UTC上午9:00开始到UTC每天9:45结束,每15分钟触发一次。
0 5 9 1/3 * ? 从每月的第一天开始,每月每3天在UTC上午9:05触发。
设置在特定的日期触发
0 1 4 1 4 ? 在每年世界标准时间4月1日凌晨4:01触发。
0 0,30 9 ? 4 WED 4月的每个星期三,在UTC上午9:00和UTC上午9:30触发。
0 5 9 15 * ? 在每个月的15日(世界标准时间)上午9:05触发。
0 5 9 15W * ? 在每个月15日最近的工作日(世界标准时间)上午9:05触发。
0 5 9 ? * 6#1 在每个月的第一个星期五上午9:05触发。
使用last设置触发器
0 5 9 L * ? 在每个月的最后一天上午9:05在世界标准时间触发。
0 5 9 ? * 2L 在每个月的最后一个星期一的UTC上午9:05触发。
0 5 9 LW * ? 在每个月的最后一个工作日世界标准时间上午9:05触发。
最后附一个关于设置SLM策略的方法给大家一个例子,仅供参考
[root@localhost ~]# curl -X PUT "192.168.159.128:9201/_slm/policy/backup-snapshots?pretty" -H 'Content-Type: application/json' -d'
{
"schedule": "0 0 0 ? * 2", #备份的时间
"name": "<backup-snap-{now/d}>", #快照的名称格式
"repository": "back", #备份的repository
"config": {
"indices": ["*"] #备份的索引
},
"retention": {
"expire_after": "14d", #快照存储的天数
"min_count": 3, #最少存多少快照
"max_count": 5 #最多存多少快照
}
}
'
参考链接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/cron-expressions.html#cron-special-characters