Corntab定时任务学习
一、crond服务
在学习crontab,命令之前,我觉得有必要学习了解一下crond服务,因为要在linux系统下使用crontab命令需要crond的支持。Crond是Linux下要用来周期执行某种任务或者等待处理某些事件的一个守护进程。和Windows中的计划任务有些类似。
Crond服务的启动和自启动方法如下:
#重新启动crond服务
service crond restart
#设定crond服务为开机自启动
chkconfig crond on
#查看crontab的运行状态
service crond status
#crontab文件内容分析
cat /etc/crontab
在centos系统下,会自动安装好crond服务,且root级别的定时任务目录在etc/contab
二、语法格式
crontab [选项] [file]
注意:这里的file指的是****命令文件的名字****,表示将 file 作为 crontab 的任务列表文件并载入 crontab,若在命令行中未指定文件名,则此命令将接受标准输入(键盘)上键入的命令,并将它们键入 crontab。
2.1 crontab选项
表 1crontab 命令常用选项及功能
*选项* | *功能* |
---|---|
-u[user] | 用来设定某个用户的 crontab 服务,例如 “-u demo” 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。 |
*-e [edit]* | *编辑某个用户的 crontab 文件内容*。如果不指定用户,则表示编辑当前用户的 crontab 文件。 |
*-l [list]* | ****显示某用户的 crontab 文件内容,****如果不指定用户,则表示显示当前用户的 crontab 文件内容。 |
*-r [remove]* | ****从 /var/spool/cron 删除某用户的 crontab 文件,****如果不指定用户,则默认删除当前用户的 crontab 文件。 |
-i | 在删除用户的 crontab 文件时,给确认提示。 |
了解了crontab的基本语法,也知道了crond服务如何开启,接下来就是重头戏了,我们就要开始学会自己编写一个定时任务以及学会看懂别人写的定时任务。【这点很重要!!!!】
在这近半年的出差开发过程中,我发现一个道理,往往在工作中,看懂别人写的代码往往比自己吭呲吭呲研究要更有用。如果你是一个刚刚步入职场经验还不够老套的时候,这些往往是学习提升自己的最有效的途径。
输入 crontab -e命令后会出现如下图所示的
熟悉的小伙伴都应该清楚,这是vi的编辑模式,所以,crontab -e本质上也是一个vi指令。
那么我们的定时任务的文件会保存在哪里呢???对的没错就是在var/spool/cron目录下
所以综上,我们想要编写一个定时任务的方式就有了多种,这里介绍三种方式
-
使用crontab -e命令完成编写
-
使用vi|vim /etc/spool/cron/[定时任务文件名]
-
使用echo直接添加
echo “* * * * * sh /root/myCode/day01/hellowrold.sh” >> /etc/spool/cron/root
2.2 crontab文件内容分析
2.2.1 crontab的时间表示
输入命令:cat /etc/crontab 可以查看cron的语法结构,如下图所示:
这里简单介绍一下,因为这与之前介绍的Java与Spring的定时任务在结构上稍有不同。在Linux系统上只有五列:【分钟 小时 天 月 星期】,比代码的定时任务少了两列。
表 2 crontab 时间表示
*项目* | *含义* | *范围* |
---|---|---|
第一个"*" | 一小时当中的第几分钟(minute) | 0~59 |
第二个"*" | 一天当中的第几小时(hour) | 0~23 |
第三个"*" | 一个月当中的第几天(day) | 1~31 |
第四个"*" | 一年当中的第几个月(month) | 1~12 |
第五个"*" | 一周当中的星期几(week) | 0~7(0和7都代表星期日) |
2.2.2 crontab时间特殊符号
表 3 时间特殊符号
*特殊符号* | *含义* |
---|---|
*(星号) | 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。 |
,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/(正斜线) | 代表每隔多久执行一次。比如"/10***命令",代表每隔 10 分钟就执行一次命令。 |
一旦编辑完成,保存退出vim模式,定时任务就会保存在自己服务器/var/spool/cron/目录下的以当前用户名命名的文件里。只要开启了crond服务,便会立刻生效。
三、小试牛刀
那么学习完了基本的语法,也学会了如何编写。那么接下来我们练习几道。
3.1 crontab举例
表 4 crontab举例
*时间* | *含义* |
---|---|
45 22 ***命令 | 在 22 点 45 分执行命令 |
0 17 ** 1命令 | 在每周一的 17 点 0 分执行命令 |
0 5 1,15**命令 | 在每月 1 日和 15 日的凌晨 5 点 0 分执行命令 |
40 4 ** 1-5命令 | 在每周一到周五的凌晨 4 点 40 分执行命令 |
*/10 4 ***命令 | 在每天的凌晨 4 点,每隔 10 分钟执行一次命令 |
0 0 1,15 * 1命令 | 在每月 1 日和 15 日,每周一个 0 点 0 分都会执行命令,*注意:星期几和几日最好不要同时出现,因为它们定义的都是天,非常容易让管理员混淆* |
0 0 1,15 * 1命令 | 在每月 1 日和 15 日,每周一个 0 点 0 分都会执行命令,*注意:星期几和几日最好不要同时出现,因为它们定义的都是天,非常容易让管理员混淆* |