Linux定时调度命令 — crontab
1、基本介绍
1.1 任务调度
指的是系统在某个时间执行的特定命令程序
1.2 任务调度分类
系统工作:需要系统执行一些周而复始的循环工作,如病毒扫描
用户工作:用户需要定期执行某些程序,如数据库的备份
1.3 crontab
crontab命令用于设置周期性执行的程序。该命令从标准输入中读取指令,并将指令存储在“/etc/crontab”文件中,供后续的读取和执行。在Linux系统中一般会安装有crontab命令,如果没有的话可以使用包管理工具进行安装。命令如下:
yum -y vixie-cron
yum -y install crontab
1.4 crontab的启动和关闭
service crontab start # 重启
service crontab stop # 停止
service crontab restart # 重启
service crontab reload # 重新载入配置
service crontab status # 查看crontab服务状态
# 加入开机启动中
chkconfig --level 345 crond on
1.5 任务调度所在的目录
cron.d/
cron.daily/
cron.deny
cron.hourly/
cron.monthly/
crontab
cron.weekly/
上述目录说明:
cron.d 系统自动定期需要做的任务
cron.daily/ 每天执行一次的job
cron.deny 用于控制不让哪些用户使用crontab功能
cron.hourly/ 每小时执行一次的任务
cron.monthly/ 每月执行一次的任务
crontab 用户配置文件。可以使用crontab -e进行编辑
cron.weekly/ 每周执行一次的任务
2、crontab命令
2.1 命令说明
命令格式 | 含义 |
---|---|
crontab -e | 编辑当前用户的定时任务列表 |
crontab -i | 以列表的形式查看当前用户的定时任务列表 |
crontab -r | 删除当前用户的定时任务列表 |
crontab命令遵循的编写规则:【* * * * * * 命令】
2.2 占位符说明:
占位符位置 | 占位符说明 |
---|---|
第一个占位符【*】-- minute | 表示分钟,取值范围【0,59】 |
第二个占位符【*】-- hour | 表示小时,取值范围【0,23】 |
第三个占位符【*】-- day | 表示天,取值范围【1,31】 |
第四个占位符【*】-- month | 表示月,取值范围【1,12】 |
第五个占位符【*】-- week | 表示周,取之范围【0,7】,0和7都表示周日 |
第六个占位符【*】-- commond | 表示要执行的命令,可以是系统命令,也可以是编写的脚步文件 |
2.3 星号【*】之间的符号说明
符号 | 符号说明 | 示例 |
---|---|---|
星号【*】 | 通配符,可以代表所有的值 | / |
逗号【,】 | 逗号间隔表示指定的列表范围 | 1,2,3,4,5 |
短斜杠【-】 | 表示一个取值范围 | “2-7”代表:2,3,4,5,6,7 |
斜线【/】 | 正斜线表示指定时间的间隔频率 | “0-23/2”表示每2个小时执行一次。星号【*】可以和【/】一起使用 |
2.4 常用时间频次举例
命令示例 | 命令含义 |
---|---|
00 05 * * * | 每天凌晨5点执行 |
20 12 1,10,20 * * | 每月1,10,20号的12:20执行 |
10 1 * * 6,0 | 表示每周六、周日的1:10执行 |
0,30 18-23 * * * | 18-23点每隔30min执行一次 |
0 23-7/1 * * * | 23点到7点每隔1小时执行一次 |
0 6-12/3 * 10 * | 每年10月每天的6点到12点每隔3小时执行一次 |
30 17 * * 1-5 | 每周1到周五每天17:30执行一次 |
0 */2 * * * | 每隔2小时执行一次 |
2.5 输出重定向
crontab执行过程中,如果没有对输出做重定向时,会默认给系统用户发邮件。定时任务会将错误输出到/var/mail/$user中。如果不做清理会占满服务器的根分区,导致机器无法登录。推荐写法:
01 09 * * * cd /opdir/test/ && ./test.sh >>test.log 2>&1 </dev/null &
Linux标准流的表示:
名称 | 类型 | 文件描述符 | 操作列 |
---|---|---|---|
stdin【标准输入】 | standard input | 0 | < 、<< |
stdout【标准输出】 | standard output | 1 | >、>> |
stderr【标准错误】 | Standard error | 2 | 2>、2>> |
Tips:
1、忽略输入【nohup】:该命令指定后面的脚本忽略输入
2、后台执行【 】 : 无论在控制台直接执行还是在定时脚本任务中,在某条命令的最后加上【 】:无论在控制台直接执行还是在定时脚本任务中,在某条命令的最后加上【 】:无论在控制台直接执行还是在定时脚本任务中,在某条命令的最后加上【】代表当前命令在后台执行,不占用控制台。但是当程序执行时需要与输入命令交互时,该程序会一直等待。如果没有输入就卡死不动。