• cron表达式


    一.cron

    计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的任务

    二.cron表达式

    Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:

    Seconds Minutes Hours DayofMonth Month DayofWeek Year或

    Seconds Minutes Hours DayofMonth Month DayofWeek

    三.每个域的取值范围

    域名 可取值 可取符号(仅列部分常用)
    秒域 0~59的整数   *    -    ,    /
    分域 0~59的整数   *    -    ,    /
    时域 0~23的整数   *    -    ,    /
    日域 1~31的整数   *    -    ,    /    ?    L
    月域 1~12的整数或JAN~DEC   *    -    ,    /
    周域 1~7的整数或SUN~SAT   *    -    ,    /    ?    L    # 
    年域 1970~2099的整数   *    -    ,    /

    四.符号的意义

    1. * 表示可以匹配该域的所有值;
    
    例如,"0 0 13 * * ?"表示每天的13点执行一次。
    
    2. ? 在cron表达式中必须出现且只能出现1次,用在日域或周域上,表示不确定值、不限制值;
    
    它与*的区别是,并不能匹配到该域上的所有值,例如指定了3月份每个周五,那么3月份的周五可能只有4个值;
    
    例如,"0 0 5 6 * ?"表示每个月6日5点钟执行而无论周几,"0 0 5 ? * 3"表示每个周三5点钟执行而无论是几号。
    
    3. - 表示匹配该域上的一个范围;
    
    例如,"0 30 9-15 ? * *"表示每天的9:30-15:30每小时执行一次,"0 1-5 * ? * 1"表示每周日每个小时的1-5分钟每分钟执行一次。
    
    4. , 表示枚举值;
    
    例如,"0 0 8,16,23 ? * 1,7"表示每个周六日的8点、16点、23点各执行一次。
    
    5. / 表示起始时间和间隔时间;
    
    例如,"0 0 3/5 * * ?"表示每天3点开始执行,每隔5个小时执行一次,即3点、8点、13点、18点、23点各执行一次,
    
    "*/5 * * * * ?"表示每隔5秒钟执行一次,"0 */1 * * * ?"表示每隔1分钟执行一次。
    
    6. # 只能用于周域上,#后面的数字表示第几周,如果不存在这个周的值,则不执行;
    
    例如,"0 0 0 ? * 5#2"表示每个月第2个周四零点执行,"15 30 6 ? * 7#5"表示每个月第5个周六6:30:15执行,如果某个月不存在第5个周六,则不执行。
    
    7. L 只能用于日域或周域,用于日域时表示当月最后一天,用于周域如果前面不加数字表示周六,加数字表示最后一个周值;
    
    例如,"0 0 23 L * ?"表示每月最后一天的23点执行,"0 0 23 ? * L"表示每周六的23点执行,"0 0 23 ? * 3L"表示每月最后一个周二的23点执行。

    五.常用表达式例子

    意义 表达式
     每隔5秒钟执行一次            */5  *  *  *  *  ?
     每隔1分钟执行一次            0  */1  *  *  *  ?
     每天1点执行一次     0  0  1  *  *  ?
     每天23点55分执行一次     0  55  23  *  *  ?
     每月最后一天23点执行一次     0  0  23  L  *  ?
     每周六8点执行一次     0  0  8  ?  *  L
     每月最后一个周五,每隔2小时执行一次     0  0  */2  ?  *  6L
     每月的第三个星期五上午10:15执行一次     0  15  10  ?  *  5#3
     在每天下午2点到下午2:05期间的每1分钟执行     0  0-5  14  *  *  ?
     表示周一到周五每天上午10:15执行     0  15  10  ?  *  2-6
     每个月的最后一个星期五上午10:15执行     0  15  10  ?  *  6L 
     每天上午10点,下午2点,4点执行一次     0  0  10,14,16  * * ?
     朝九晚五工作时间内每半小时执行一次     0  0/30  9-17  *  * ?
     每个星期三中午12点执行一次     0  0  12  ?  *  4
     每年三月的星期三的下午2:10和2:44各执行一次       0  10,44  14  ?  3  4 
     每月的第三个星期五上午10:15执行一次     0  15  10  ?  *  6#3
     每月一日凌晨2点30执行一次     0  30  2  1  *  ?
     每分钟的第10秒与第20秒都会执行     10,20  *  *  *  * ?
     每月的第2个星期的周5,凌晨执行     0  0  0  ?  *  6#2

    六.注意事项:

    1. 有些子表达式能包含一些范围或列表
    例如:子表达式(天(星期))可以为 "MON-FRI""MON,WED,FRI""MON-WED,SAT"
    
    2. "*"字符代表所有可能的值
    因此,"*"在子表达式(月)里表示每个月的含义,"*"在子表达式(天(星期))表示星期的每一天
    
    3. "/"字符用来指定数值的增量 
    例如:在子表达式(分钟)里的"0/15"表示从第0分钟开始,每15分钟 
    在子表达式(分钟)里的"3/20"表示从第3分钟开始,每20分钟(它和"3,23,43")的含义一样
    
    4. "?"字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值 
    当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为"?"
    
    5. "L" 字符仅被用于天(月)和天(星期)两个子表达式,它是单词"last"的缩写 
    但是它在两个子表达式里的含义是不同的。 
    在天(月)子表达式中,"L"表示一个月的最后一天 
    在天(星期)自表达式中,"L"表示一个星期的最后一天,也就是SAT
    如果在"L"前有具体的内容,它就具有其他的含义了
    例如:"6L"表示这个月的倒数第6天,"FRIL"表示这个月的最一个星期五 
    注意:在使用"L"参数时,不要指定列表或范围,因为这会导致问题
  • 相关阅读:
    cocos2dx 2.14使用UUID
    cocos2dx游戏项目总结(持续更新)
    window mac iPhone 三种比较相似的字体
    【luogu P4762】字符串合成 / Virus synthesis(PAM)(DP)
    【luogu P7796】图书管理员 / POLICE(并查集)(树状数组)
    【luogu P5494】【模板】线段树分裂(线段树合并)(线段树分裂)
    【luogu P2595】多米诺骨牌(插头DP)(容斥)
    送分大水题(高维前缀和)(高维差分)
    【luogu P6880】Bus / 奥运公交 / オリンピックバス(最短路)
    【luogu P1879】Corn Fields G / 玉米田++ / 玉米田(加加强版)(状压DP)(轮廓线DP)
  • 原文地址:https://www.cnblogs.com/mrwhite2020/p/15195550.html
Copyright © 2020-2023  润新知