命令说明
如果没有 crontab 命令先安装:
yum install -y crontabs && systemctl status crond.service && systemctl enable crond.service
crontab 会每隔 1 分钟进行检查有没有任务需要执行
编辑任务 : crontab -e
查看任务:crontab -l
清除所有任务:crontab -r
crontab 文件的含义:crontab 文件中,每一行都代表一项任务,每行的每个字段代表一项设置,格式共分为 6 个字段,前 5 段属于时间设定段,最后一段是要执行的命令段,格式:
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/
Linux* * * * *- - - - -| | | | || | | | +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat| | | +---------- month (1 - 12) OR jan,feb,mar,apr ...| | +--------------- day of month (1 - 31)| +-------------------- hour (0 - 23)+------------------------- minute (0 - 59)
需求举例:
每隔2分钟输出当前的时间,输出文件保存到 /root/data.txt
$ crontab -e*/2 * * * * echo $(date) >> /root/date.txt
每天的凌晨 2 点 执行
0 2 * * * 执行的命令或脚本所在路径
每隔2天的晚上 10 点 执行
0 22 */2 * * 执行的命令或脚本所在路径
每隔两天的上午8点到11点的第3和第15分钟执行
3,5 8-11 */2 * * 执行的命令
每个星期一的上午8点到11点的第3和第15分钟执行
3,5 8-11 * * 1 执行的命令或脚本所在路径
每周六、周日凌晨 24点 执行命令
0 0 * * 6,7 执行的命令或脚本所在路径
Crontab中使用环境变量
- 环境变量尽量都使用绝对路径
- 无法找到命令时候,请使用终极大法:source 重载配置 ```shell
- source /$HOME/.bash_profile && command ```
- 对于某些特定环境变量或有特定的处理方式,如 PATH,命令使用绝对路径即可解决
% 的使用
第一个%表示标准输入的开始:
* * * * * cat >> /tmp/cat.txt 2>&1 % stdin input
执行成功后 查看 /tmp/cat.txt
$ cat /tmp/cat.txtstdin input
我们看到标准输入写入到了/tmp/cat.txt文件。理解上面示例,首先需知cat >> /tmp/cat.txt ,作用是将标准输入重定向至/tmp/cat.txt
其余%表示换行符:
* * * * * cat >> /tmp/cat_line.txt 2>&1 % stdin input 1 % stdin input 2 % stdin input 3
输出结果为:
$ cat /tmp/cat_line.txtstdin input 1stdin input 2stdin input 3
输出结果为三行 , 想要不换行,只需要加 \ 转义即可:
* * * * * cat >> /tmp/cat_special.txt 2>&1 % per cent is \%. 2>&1
