crom

作者: 心帝_w | 来源:发表于2019-09-29 21:29 被阅读0次

    Cron

    crontab

    crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。

    通常,crontab储存的指令被守护进程激活,crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

    crontab文件

    crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。

    crontab文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。

    操作符号

    在一个区域里填写多个数值的方法:

    • 逗号(',')分开的值,例如:“1,3,4,7,8”
    • 连词符('-')制定值的范围,例如:“1-6”,意思等同于“1,2,3,4,5,6”
    • 星号('*')代表任何可能的值。例如,在“小时域”里的星号等于是“每一个小时”,等等

    某些cron程序的扩展版本也支持斜线('/')操作符,用于表示跳过某些给定的数。例如,“*/3”在小时域中等于“0,3,6,9,12,15,18,21”等被3整除的数;

    时间设置

    # 文件格式说明
    #  ——分钟(0 - 59)
    # |  ——小时(0 - 23)
    # | |  ——日(1 - 31)
    # | | |  ——月(1 - 12)
    # | | | |  ——星期(0 - 7,星期日=0或7)
    # | | | | |
    # * * * * * 被执行的命令
    
    

    注:

    1. 在“星期域”(第五个域),0和7都被视为星期日。
    2. 不很直观的用法:如果日期和星期同时被设定,那么其中的一个条件被满足时,指令便会被执行。请参考下例。
    3. 前5个域称之分时日月周,可方便个人记忆。

    从第六个域起,指明要执行的命令。

    crontab命令的使用

    由于MAC OS自带cron,就无需在安装crond服务了。

    样例:

    1. 创建一个新的crontab文件,并在文件内写入cron表达式,例如* * * * * date >> ~/tmp/ls.txt(含义为每隔一分钟将当前日期写入到ls.txt中)

      cd ~/tmp
      touch temp_cron && vim temp_cron
      
      
    2. 提交刚刚创建的crontab文件

      crontab temp_cron
      
      
    3. 列出crontab文件,可以看到* * * * * date >> ~/tmp/ls.txt

      crontab -l
      
      
    4. 查看ls.txt文件,可以看到定时任务生效

      Thu Jul 20 14:59:00 CST 2017
      Thu Jul 20 15:00:00 CST 2017
      Thu Jul 20 15:01:00 CST 2017
      Thu Jul 20 15:02:00 CST 2017
      Thu Jul 20 15:03:00 CST 2017
      Thu Jul 20 15:04:00 CST 2017
      Thu Jul 20 15:05:00 CST 2017

    5. 编辑crontab文件

      crontab -e
      
      
    6. 删除crontab文件,cron任务停止

      crontab -r
      
      

    Quartz中的cron表达式

    格式

    格式为{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)},较crontab的表达式,多了秒和年。

    格式详解

    字段

    字段 有效范围 特殊字符
    0~59 , - * /
    分钟 0~59 , - * /
    小时 0~23 , - * /
    日期 0~31 , - * / ? L W C
    0~11 , - * /
    星期 1~7 或 SUN,MON,TUE,WED,THU,FRI,SAT , - * / ? L # C
    年份 1970~2099 , - * /

    通配符

    通配符 含义
    , 用来列出枚举值,例如:在分钟字段里用“5,20”意味着在5和20分每分钟会触发一次
    - 指定一个值的范围
    * 代表所有可能的值
    / 用来指定数值的增量例如:在分钟字段里用“0/15”表示从第0分钟开始,每15分钟
    ? 表示不指定值
    L(Last) 用在日期表示一个月中的最后一天例如:6L,表示某月的倒数第6天用在星期表示一个月中的最后一个星期x例如:FRIL,表示某月的最后一个星期五
    W(Work) 指定离给定日期最近的工作日(周一到周五)例如:在日期字段用“15W”指这个月最接近第15天的工作日,如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发如果这个月第15天是周日,那么触发器将会在这个月第16天即周一触发
    C(Calendar) 指和日历关联后计算过的值例如:在日期 字段用“5C”指在这个月第5天;在星期字段用“1C”指在周日
    #(No) 表示该月第几个星期x例如:4#2,表示某月的第二个星期三;6#3,表示某月的第三个星期五

    注意:

    • 其中每个元素可以是一个值,一个连续区间,一个间隔时间,一个列表,通配符。
    • 由于"日期"和"星期"这两个元素互斥的,必须要对其中一个设置"?"。

    常用例子

    • "0 0 12 * * ?" 每天12点触发
    • "0 0 12,20 * * ?" 每天12点和20点触发
    • "0 0/5 * * * ?" 每隔5分钟触发一次
    • "0 0 10 * * ? 2015" 2015年的每天10点触发
    • "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
    • "0 15 10 15 * ?" 每月15日上午10:15触发
    • "0 15 10 L * ?" 每月最后一日的上午10:15触发

    参照

    相关文章

      网友评论

          本文标题:crom

          本文链接:https://www.haomeiwen.com/subject/vypfuctx.html