Cron 表达式教程
cron是类unix系统的一款实用工具。可以利用其实现周期性在特定日期/时间运行任务,是自动化运行重型任务的好工具,否则需要人工干预。ron作为精灵线程运行————意味着仅需要开始一次,然后在后台运行。进程利用crontab读取计划项并启动任务。随着时间推移,cron表达式被广泛采用,所以经常会在很多其他程序或库中使用。
使用Crontab
cron计划是简单文本文件,linux系统位于/var/spool/cron/crontabs。该文件不能直接编辑,需要使用crontab命令进行访问。
举例,打开crontab文件,需要触发下面命令:
crontab -e
crontab中的每行定义一项表达式和运行任务:
* * * * * * /usr/local/ispconfig/server/server.sh
该项会每秒运行一次脚本。
Cron表达式
下面看看cron表达式的语法,有六个字段组成:
<second> <minute> <hour> <day-of-month> <month> <day-of-week> <year> <command>
其中 字段是可选的。
表达式中的特殊字符
-
(all) – 用于指定在每个时间单元运行特定事件。举例 “*” 在 自动 – 意味着每分钟。
-
? (any) – 用在 和 <day-of -week> 字段,表示任意值 –
忽略该字段值。举例,如果我们想在每月5号运行特定脚本,并不关心星期几,可以使用 “?” 在 字段上。 -
– (range) – 用于决定值得范围。举例, “10-11” 在 字段表示 “10th and 11th hours”
-
, (values) – 用于指定多个值。举例, “MON, WED, FRI” 在 字段表示
“Monday, Wednesday, and Friday” 三天 -
/ (increments) – 用于指定增加至。举例, “5/15” 在 字段上, 表示 “小时上的5, 20, 35
和 50 分钟”,即每次增加15分钟之后运行
-
L (last) – 用在不同字段上意思有差异。举例, 用在 字段, 表示月的最后一天,
如1月31日和日历的每个月份。也可以和偏移量一起使用,如 “L-3“, 表示月的最后三天。在字段上,
特指周的最后一天。也可以和字段的值一起使用, 如“6L“, 表示最后一个星期五。 -
W (weekday) – 它用于指定一个月中最接近给定日期的工作日(周一到周五)。举例,如果指定 “10W” 在
字段上, 表示最接近月度第十个工作日。所以如果第十日是星期六,那么则在第九个工作日触发任务,
如果第十个工作日是星期天, 则会在第十一个工作日触发。如果在
字段上指定“1W”,且第一日是星期六,则会在第三日即星期一触发任务,不能跳到上一个月。 -
‘#’ – 用于指定月的第几个周天, 举例,月的第三个星期五可表示为 “6#3“ 。
示例及测试
下面看几个示例:
2017年每天12点执行:
0 0 12 * * ? 2017
每天从下午1点开始,1点55分结束,下午6点开始,6点55分结束。
0 0/5 13,18 * * ?
下午1至1点零5分的每分钟:
0 0-5 13 * * ?
每个月的星期二上午1:15 pm 和 1:45:
0 15,45 13 ? 6 Tue
读者可以通过一些在线工具进行测试,如:cronexpressiondescriptor 。
总结
本文描述了cron 任务及crontab,并详细解释了不同符号的使用。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/96566301