Linux定时任务Crontab
一、定时任务
1、在讲什么是Linux当中的定时任务,我们先说一下什么是定时任务?
在平时生活中,大家都会遇到一些定时重复性任务。比如,你每天8点钟上课,你可以每天早上定一个7点30的闹钟;你的公司应该每月15号发工资,但一般不会准时发给你;每年的几号是你的结婚纪念日,你可以拿个小本本记下来。等等这些我们会定时定点的做的一些事情就是定时任务
2、那Linux当中为什么要用定时任务?
在Linux当中,为了使管理员方便去处理某些重复性的事情,降低运维压力,节约时间成本。比如,每周二凌晨4点服务器重启维护;每天凌晨2点执行数据库的备份;每月删除上月的过期日志。等等这些任务,我们不可能守着机器执行,机器不累,人扛不住啊,所以我们就要借用Linux定时任务来帮助我们去执行这些重复性的工作
二、定时任务的使用
先来举个简单的例子
[root@master ~]# crontab -e
* * * * * echo "you are a successful man" >> /tmp/test
我们使用crontab命令进入定时任务界面(类似于vi/vim编辑器,在这里你就可以编写你的定时任务了)
上边这个代表我要每分钟在/tmp/test文件中写入you are a successful man
那大家就会问了 怎么代表的?
是 * * * * * * 代表的。
那 * * * * * * 分别代表什么呢?
接下来我们就看看 * * * * * 代表什么意义
三、各字段表示含义
字段 | 含义 | 范围 |
---|---|---|
第一个“*” | 一小时当中的第几分钟 | 0-59 |
第二个“*” | 一天当中的第几小时 | 0-23 |
第三个“*” | 一个月当中的第几天 | 1-31 |
第四个“*” | 一年当中的第几月 | 1-12 |
第五个“*” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
紧接着我们举几个例子:
[root@master ~]# crontab -e
0 4 * * 2 shutdown -r now
0 2 * * * cp -rf /var/lib/mysql/mysql/* /tmp/mysql
0 0 1 * * rm -rf /tmp/test.log
5 * * * * echo aaa > /tmp/test
上边的这四个定时任务分别代表
每周二凌晨四点重启计算机
每天凌晨两点备份数据库
每月一号删除test备份日志
每小时的第五分钟将aaa写入文件/tmp/test中
但是你可能会问5 * * * *这一个不应该代表每五分钟写入文件吗?
不是的,那我们接下来去看一下它的更高级用法。
四、定时任务高级用法
特殊字符 | 代表意义 |
---|---|
* | 代表任何时刻都接受的意思。举例来说,范例一内那个日、月、周都是*,就代表着不论何月、何日的礼拜几的12:00都执行后续命令的意思。 |
, | 代表分隔时段的意思。举例来说,如果要执行的工作是3:00与6:00时,就会是:0 3,6 * * * command时间还是有五列,不过第二列是 3,6 ,代表3与6都适用 |
- | 代表一段时间范围内,举例来说,8点到12点之间的每小时的20分都进行一项工作:20 8-12 * * * command 仔细看到第二列变成8-12.代表 8,9,10,11,12 都适用的意思 |
/n | 那个n代表数字,即是每隔n单位间隔的意思,例如每五分钟进行一次,则:/5 * * * * command 用与/5来搭配,也可以写成0-59/5,意思相同 |
所以说 如果想要表示每五分钟写入文件应该是这样的
*/5 * * * * echo aaa > /tmp/test
紧接着我们举几个例子:
[root@master ~]# crontab -e
45 1 * * * shutdown -r now
0 17 * * 7 cp -rf /var/lib/mysql/mysql/* /tmp/mysql
0 5 7,15 * * rm -rf /tmp/test.log
40 4 * * 1-6 echo aaa > /tmp/test
*/10 4 * * * bash /root/box.sh
0 0 1,15 * 1 yum makecache
上边的这六个定时任务分别代表
每天凌晨1点45重启计算机
每周2的17点备份数据库
每月7号和15号凌晨5点删除test备份日志
每周一到周六凌晨4点40将aaa写入文件/tmp/test中
每天凌晨四点,每隔十分钟执行脚本
每月1号和15号,每周一都重新生成yum缓存
五、crontab其它命令
[root@master ~]# crontab -e #编辑crontab 的工作内容
[root@master ~]# crontab -l #查阅crontab的工作内容
0 4 * * 2 shutdown -r now
0 2 * * * cp -rf /var/lib/mysql/mysql/* /tmp/mysql
0 0 1 * * rm -rf /tmp/test.log
5 * * * * echo aaa > /tmp/test
[root@master ~]# crontab -r #删除所有的crontab的工作内容,若仅要删除一项,请用-e