crontab 是 Linux 系统中用于设置周期性被执行的指令的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
Linux 任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔 10 分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
查看配置文件:
vim /etc/crontab
如果软件不存在安装:
yum -y install crontabs
#启动:
ystemctl start crond.service
语法:
crontab 选项
选项:
-u<user> : 定义用户
-e : edit:编辑用户的crontab
-l : list:列出用户的crontab
-r : remove:删除用户的crontab
-n<host> : 为某用户设置的crontab(仅root可用)
-x<mask> : 启用调试
示例:
1.添加定时任务 :每天12点执行 t.sh 脚本
crontab -e
#给用户 tom 添加定时任务
crontab -e -u tom
Minutes Hours Day-of-Month Month Day-of-Week Command
分钟 小时 日 月 周 执行的命令,最好是命令的绝对路径
0-59 0-23 1-31 1-12 0-7
* * * * *
每小时的某一分钟
每天的某小时
每月的某天
每年的某月
2.查看任务列表:查看当前用户的任务列表
crontab -l
#查看用户 tom 的任务列表
crontab -l -u tom
3.删除用户的 crontab 文件
crontab -r
#删除用户 alan 的 crontab 文件
crontab -r -u alan
特殊:
* 每分钟/小时/.....
*/n 表示每 n (分钟/小时......)个时间间隔执行一次
, 不同的时间段
a-b 表示范围a-b分钟/小时......
#每天6点执行
0 6 * * * /home/t.sh
#每月1号的早上6点执行
0 6 1 * * /home/t.sh
#每年2月1号的早上6点执行
0 6 1 2 * /home/t.sh
#每周六凌晨4:00执行
0 4 * * 6 /home/t.sh
#每隔5分钟执行
*/5 * * * * /home/t.sh
#每隔30分钟执行
*/30 * * * * /home/t.sh
#每周早上9:30-10:30
30 9-10 * * 1 /home/t.sh
#每周一到周五早上9:30
30 9 * * 1-5 /home/t.sh
#每天6,12,18点执行
00 6,12,18 * * * /home/t.sh
#每月1,5,8号的2:00整执行
00 02 1,5,8 * * /home/t.sh
#每月1号和15号检查/home 磁盘
0 0 1,15 * * fsck /home
* * * * * | 每分钟执行一次 |
0 * * * * | 每小时的第 0 分钟执行一次 |
0 0 * * * | 每天的午夜(0 点)执行一次 |
0 0 * * 0 | 每周日的午夜(0 点)执行一次 |
0 0 1 * * | 每个月的第一天午夜(0 点)执行一次 |
0 0 L * * | 每个月的最后一天午夜(0 点)执行一次 |
0 0 1 1 * | 每年的第一天午夜(0 点)执行一次 |
0 0 * * 3 | 每周三的午夜(0 点)执行一次 |
0 0 1,15 * * | 每个月的第 1 和第 15 天午夜(0 点)执行一次 |
0 0 * * FRI | 每周五的午夜(0 点)执行一次 |
0 0 * * 5 | 每周五的午夜(0 点)执行一次 |
0 8-17 * * * | 每天的上午 8 点到下午 5 点每小时执行一次 |
0 12 * * MON | 每周一的中午(12 点)执行一次 |
0 0 15 * * | 每个月的第 15 天午夜(0 点)执行一次 |
0 0 * * 3 | 每周三的午夜(0 点)执行一次 |
0 8-17 * * * | 每天的上午 8 点到下午 5 点每小时执行一次 |
0 0 * * 1-5 | 每个工作日的午夜(0 点)执行一次 |
0 0 1 * FRI | 每个月的第一个星期五午夜(0 点)执行一次 |
0 0 1,15 * * | 每个月的第 1 和第 15 天午夜(0 点)执行一次 |
0 0 15 1 * | 每年的 1 月 15 日午夜(0 点)执行一次 |
0 0 * * 7 | 每周日的午夜(0 点)执行一次 |
0 0 * * 5 | 每周五的午夜(0 点)执行一次 |
脚本无法执行问题
如果我们使用 crontab 来定时执行脚本,无法执行,但是如果直接通过命令(如:./test.sh)又可以正常执行,这主要是因为无法读取环境变量的原因。
解决方法:
1、所有命令需要写成绝对路径形式,如: /usr/local/bin/docker。
2、在 shell 脚本开头使用以下代码:
#!/bin/sh
. /etc/profile
. ~/.bash_profile
3、在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,例如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh