开发者学堂课程【Linux 系统管理进阶第三课时:crontab】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/789/detail/13755
crontab
内容简介
一、crontab的基本介绍
二、crontab语法
三、crontab常用工具
四、crontab的坑
一、crontab 的基本介绍
crontab 是用来定期执行程序的命令,当安装完成操作系统之后,默认便会启动此任务调度命令。
Crond 命令会在后台每分钟定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
在实际使用过程中,我们有四个常用的命令介绍:
① crontab-I 列出目前的日程表
② Crontab-e 编辑当前日程表
③ Crontab-r 删除当前日程表
④ Crontab-u xx -I 列出xx用户的日程表
大家就可以根据自己的使用需要去编辑自己的命令。
二、crontab 语法
crontab 作为一个定时任务调度的程序,就存在着定时任务调度的语法。在实际使用过程中,它的语法是以定义分钟、小一个月中的第几天、月份、星期,并附上对应的命令(program),来完成对应的定义。
如果说在分钟定义的是0,在小时定义的是0,在一个月中的第几天定义的是1,在月份中也定义1,在星期中定义*(代表所有可能的值),最后输入一个echo hello,这就代表着在1月的1时的0时0分去执行echo hello。
常用语法:
①星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的 执行该命令操作。
② 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8.9
③中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6"
④正斜线(/):可以用正斜线指定时间的问隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
在实际使用过程中我们如何编辑crontab:
首先,登陆服务器以后,其实看不到crontab 列表,这时可以执行crontab-I 来查看调度表,这里显示当前用户是没有crontab 任务的,接下来可以使用crontab-e 进入编辑模式,去定义定时任务,先用* * * * *表示任意分钟任意小时任意天任意月份以及任意星期,用五个*号表示在任意时间都要执行。然后可以执行一个命令:echo“123/r/n” >> /tmp/crontabtest(输出tmp目录下的crontabtest文件),然后保存并退出,这样就会在tmp目录下出现一个对应的生成的文件,这时就可以使用crontab-l来查看我们的服务。这时再去看刚刚所介绍分钟、小时、天、月份以及星期,就知道具体的它们其实都是哪些命令,代表着什么样的时长。
在实际使用过程中,我们就可以根据我们的需要去调整我们实际看到的效果。或者我们直接使用ls/tmp,目前我们还没有启用我们的定时任务,这时我们可以使用systemctl statsus crond.service, 就可以看到我们服务的运行状况,当我们重启我们的服务之后,再看一下我们的tmp 目录,就可以看到crontabtest文件。
查看crontabtest 文件,就会显示刚刚输入的信息,这时crontab 就已经执行成功了。再输入crontab-l 显示命令,用crontab-r 去清空。当重新输入crontab-l,就会发现刚刚的任务没有了。
三、crontab 的常用工具
当觉得很困惑时,可以使用crontab guru 这个工具快速的理解crontab 的语法,可以把看到的命令规则填写在此工具的输入框中,工具就会告诉我们这个命令会在什么样的情况下执行。
例如:当输入 * * * * *,这个工具就会告诉我们,这个命令在每个分钟都会执行。当输入*/2 * * * *,这个工具就会告诉我们,这个命令会在每一个第二分钟执行。当输入0-30/2 * * * * ,工具会告诉我们,这个命令在0-30分钟之间每隔一个执行一次。
有了这个工具,就可以很快速的了解命令在下一个什么时间点执行。
四、crontab 的坑
①新创建的cron 任务,不会马上执行,至少要过2分钟后才可以,当然可以重启cron 来马上执行
②crontab 中的命令需要写成绝对路径
注:
第①点是因为crontab 会有一个加载的机制,我们编写的命令需要加载到crontab 的整个进程当中,需要等下一次执行的时候才能够加载进去。
第②点的绝对路径是因为crontab 有他自己的用户信息,与所配置的用户信息不符,就会没有办法执行,所以写成绝对路径,确保我们的命令可以被执行。