命令说明

如果没有 crontab 命令先安装:

  1. yum install -y crontabs && systemctl status crond.service && systemctl enable crond.service

crontab 会每隔 1 分钟进行检查有没有任务需要执行
编辑任务 : crontab -e
查看任务:crontab -l
清除所有任务:crontab -r

crontab 文件的含义:crontab 文件中,每一行都代表一项任务,每行的每个字段代表一项设置,格式共分为 6 个字段,前 5 段属于时间设定段,最后一段是要执行的命令段,格式:
image.png
minute hour day month week command
对应 :分钟 小时 日 月 周,其中周的范围为:0-7,0或者7都是代表星期日

在各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

在线计算 Crontab 命令执行时间:https://tool.lu/crontab/

  1. Linux
  2. * * * * *
  3. - - - - -
  4. | | | | |
  5. | | | | +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
  6. | | | +---------- month (1 - 12) OR jan,feb,mar,apr ...
  7. | | +--------------- day of month (1 - 31)
  8. | +-------------------- hour (0 - 23)
  9. +------------------------- minute (0 - 59)

需求举例:

  1. 每隔2分钟输出当前的时间,输出文件保存到 /root/data.txt

    1. $ crontab -e
    2. */2 * * * * echo $(date) >> /root/date.txt
  2. 每天的凌晨 2 点 执行

    1. 0 2 * * * 执行的命令或脚本所在路径
  3. 每隔2天的晚上 10 点 执行

    1. 0 22 */2 * * 执行的命令或脚本所在路径
  4. 每隔两天的上午8点到11点的第3和第15分钟执行

    1. 3,5 8-11 */2 * * 执行的命令
  5. 每个星期一的上午8点到11点的第3和第15分钟执行

    1. 3,5 8-11 * * 1 执行的命令或脚本所在路径
  6. 每周六、周日凌晨 24点 执行命令

    1. 0 0 * * 6,7 执行的命令或脚本所在路径

Crontab中使用环境变量

  1. 环境变量尽量都使用绝对路径
  2. 无法找到命令时候,请使用终极大法:source 重载配置 ```shell
          • source /$HOME/.bash_profile && command ```
  1. 对于某些特定环境变量或有特定的处理方式,如 PATH,命令使用绝对路径即可解决

% 的使用

第一个%表示标准输入的开始:

  1. * * * * * cat >> /tmp/cat.txt 2>&1 % stdin input

执行成功后 查看 /tmp/cat.txt

  1. $ cat /tmp/cat.txt
  2. stdin input

我们看到标准输入写入到了/tmp/cat.txt文件。理解上面示例,首先需知cat >> /tmp/cat.txt ,作用是将标准输入重定向至/tmp/cat.txt
其余%表示换行符:

  1. * * * * * cat >> /tmp/cat_line.txt 2>&1 % stdin input 1 % stdin input 2 % stdin input 3

输出结果为:

  1. $ cat /tmp/cat_line.txt
  2. stdin input 1
  3. stdin input 2
  4. stdin input 3

输出结果为三行 , 想要不换行,只需要加 \ 转义即可:

  1. * * * * * cat >> /tmp/cat_special.txt 2>&1 % per cent is \%. 2>&1