Linux定时任务Crontab规则初探

关于如何安装启动等专业问题,先放一边,让我们先以一张优雅又不失经典的图示开始这篇小笔记

# For details see man 4 crontabs (嗯这是文件原本的注释没错)

# 这是一条定时任务的执行时间定义:
# .---------------- 分钟 (0 - 59)
# | .-------------- 小时 (0 - 23)
# | | .------------ 日期 (1 - 31)
# | | | .---------- 月份 (1 - 12)
# | | | | .-------- 星期 (0 - 6) (星期天 = 0 或者 7)
# | | | | |
# * * * * *

虽然每个字都能看懂,但是连起来就完全看不懂 (* ̄︶ ̄) ,这就有点为难笔记本君了!别着急,上图中有5个填空位置,让我们先来看看可以填点什么:

注: Linux Crontab 的最小粒度是一分钟执行一次


1. 星号 (*) : 表示该位置可能出现的任何值
例: 如月份的位置填入星号 则在满足其他4个条件的情况下 每个月都会执行

2. 逗号 (,) : 逗号分隔的数字表示该位置有多个值
例: 如月份的位置填入 1,2,3,4 则只有在 1234 月份的时候会执行

3. 横杠 (-) : 表示一个值的范围
例: 如月份的位置填入 1-4 则 等于 1,2,3,4 的效果

4. 斜杠 (/) : 表示每 N 个单位时间执行一次
例: 如月份的位置填入 */2 则表示 每隔 2 个月 执行一次

5. 数字 : 表示满足具体的值才会执行
例: 如月份的位置填入 1 则表示只有 1 月份 才会执行

真是枯燥无聊的概念,还是有点迷糊怎么办 (~ ̄▽ ̄)~ ,常见句式来了解一波!

  • 1 * * * * : 数字表示精确的值,只有等于这个精确值的时候才会得到执行
  • * * * * * : 当所有位置都是星号时,每个执行周期(1min),都会被执行一次
  • 1,2 * * * * : 然后是可爱的逗号,分钟的位置指定了只有分钟的值是 1 OR 2 的时候才会被执行
  • 1-2 * * * * : 这个句式和上面的是一样的意思,可以用横杠表示一段连续的时间
  • */2 * * * * : 如果需要间隔执行(比如说一小时执行30次)则可以写成,每间隔2分钟执行一次

聪明的你应该稍微有一点概念了,下面我们再来一点更具体的例子!

场景: 删库跑路 ( 精准定时任务 )

胖虎正准备删库跑路,如果马上删库,可能会造成当场被抓,跑路失败,此时聪明的胖虎想到了使用定时任务来执行删库脚本,于明日中午的12点15分进行删库,对照我们最开始的优雅图示,很容易就能得到以下的规则:

# 当前是北京时间 2018-10-11 14:00:00
# 胖虎编写了一个惨无人道的定时跑路任务

# .---------------- 分钟 (15分)
# |  .-------------- 小时 (12时)
# |  |  .------------ 日期 (12日)
# |  |  |  .---------- 月份 (10月)
# |  |  |  |  .-------- 星期 (不管星期几都无法阻止我删库!)
# |  |  |  |  |
# *  *  *  *  *
  15 12 12 10 * rm -rf /*

这一波神之操作,事了拂衣去,深藏功与名,成功让胖虎(♂) 获得了很多男盆友,捡肥皂技能经验值一路飙升无法自拔!

场景:胖虎的救赎 ( 每日执行任务 )

没错,我胖虎还会再回来的!这次为了预防类似胖虎疯狂删库的情况发生,大雄编写了如下的定时任务 :

# 当前是北京时间 2018-10-15 16:00:00
# 胖虎的定时任务已被删除 大雄添加了新的任务

# .---------------- 分钟 (整点执行)
# | .-------------- 小时 (中午12时 - 这是24小时制没错)
# | |  .------------ 日期 (所有日期)
# | |  | .---------- 月份 (所有月份)
# | |  | | .-------- 星期 (不管是星期几都要进行备份)
# | |  | | |
# * *  * * *
  0 12 * * * backup.sh # 执行备份脚本

这就很棒棒,每天中午12点进行一次备份,即使删除也能恢复数据,有本事再来删库呀!

场景: 爆满的备份文件 ( 间隔执行任务 )

自从大雄添加了定时任务,感觉很稳,又过了一段时间,大雄收到了一条消息提醒:

您的服务器磁盘储存空间已满,请清理部分文件释放空间,否则就爆炸给你看!

大雄到服务器上一看,这特么就很棒棒,整个硬盘都被备份文件占据了,于是大雄又编写了如下的定时任务 :

# 当前是北京时间 2019-05-23 21:00:00
# 大雄添加了定时备份任务
# 大雄添加了备份文件清理任务

  0 12 * * *   backup.sh # 执行备份脚本 (每日的中午12点)
  0 23 */5 * * clean.sh  # 执行备份清理 (每隔5天 晚上的23:00 进行备份清理)

这回大雄稳了,给自己点了个赞!编写定时任务没有想象的那么难嘛!

results matching ""

    No results matching ""