|
| 1 | +--- |
| 2 | +title: Linux定时任务crontab的使用 |
| 3 | +date: 2018-05-23 22:14:25 |
| 4 | +url: linux/linux-crontab |
| 5 | +tags: |
| 6 | + - Crontab |
| 7 | + - 定时任务 |
| 8 | +categories: |
| 9 | + - Linux |
| 10 | +thumbnail: /static/blog/images/logo/linux-crontab.png |
| 11 | +--- |
| 12 | + |
| 13 | + |
| 14 | + |
| 15 | + |
| 16 | + |
| 17 | +### crontab介绍 |
| 18 | + |
| 19 | +crontab经常被用于设置周期性任务,Linux系统本身就存在的许多计划性任务是由cron服务来控制,因此默认情况下,这个cron服务也是默认启动的。crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。Linux 系统为使用者控制计划任务提供的命令:`crontab 命令`。 |
| 20 | +<!-- more --> |
| 21 | + |
| 22 | +### crontab文件 |
| 23 | +`Linux的系统任务调度文件`,可以在/etc/crontab文件中查看系统计划任务信息。在CentOS7中文件内容如下: |
| 24 | +```shell |
| 25 | +[root@VM_105_191_centos ~]# cat /etc/crontab |
| 26 | +SHELL=/bin/bash #使用哪个shell |
| 27 | +PATH=/sbin:/bin:/usr/sbin:/usr/bin #系统命令的路径 |
| 28 | +MAILTO=root #任务执行结果通知给root用户,不写则不通知 |
| 29 | + |
| 30 | +# For details see man 4 crontabs |
| 31 | +# 任务命令格式说明 |
| 32 | +# Example of job definition: |
| 33 | +# .---------------- minute (0 - 59) |
| 34 | +# | .------------- hour (0 - 23) |
| 35 | +# | | .---------- day of month (1 - 31) |
| 36 | +# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... |
| 37 | +# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat |
| 38 | +# | | | | | |
| 39 | +# * * * * * user-name command to be executed |
| 40 | +``` |
| 41 | +`Linux的用户任务调度文件`,系统会把用户使用crontab工具定制的周期性计划任务保存在:`/var/spool/cron/`目录中,里面的文件名和用户名相同,对应每个用户,可以直接查看。 |
| 42 | + |
| 43 | +### 计划任务时间设置 |
| 44 | +上面的Crontab文件没有任何计划任务,但是有一份详细的crontab文件格式说明,我们按照文件中的内容可以很好的理解五个*号区域所代表的意思。 |
| 45 | +```shell |
| 46 | +# 指令格式说明: |
| 47 | +# .---------------- 分 (0 - 59) |
| 48 | +# | .------------- 时 (0 - 23) |
| 49 | +# | | .---------- 日 (1 - 31) |
| 50 | +# | | | .------- 月 (1 - 12) |
| 51 | +# | | | | .---- 星期 (0 - 6) (星期日=0 或 7) |
| 52 | +# | | | | | |
| 53 | +# * * * * * 操作指令 |
| 54 | +``` |
| 55 | +这里需要注意的是,如果日期和星期同时被设定,那么其中的一个条件被满足时,指令便会被执行。 |
| 56 | +在上面的每个区域中, |
| 57 | + |
| 58 | +| 说明 | |
| 59 | +| :-------- : | |
| 60 | +|星号('*')代表任何可能的值。例如,在“小时域”里的星号等于是“每一个小时”,等等 | |
| 61 | +|逗号(',')分开的值,例如:“1,3,4,7,8” | |
| 62 | +|连词符('-')指定值的范围,例如:“1-6”,意思等同于“1,2,3,4,5,6” | |
| 63 | +|某些cron程序的扩展版本也支持斜线('/')操作符,例如,“*/3”在小时域中等于“0,3,6,9,12,15,18,21”等被3整除的数; | |
| 64 | + |
| 65 | +实例:每1分钟输出一次hello |
| 66 | +命令:\* \* \* \* \* command |
| 67 | + |
| 68 | +实例:每小时的第3和第15分钟执行 |
| 69 | +命令:3,15 \* \* \* \* command |
| 70 | + |
| 71 | +实例:在上午8点到11点的第3和第15分钟执行 |
| 72 | +命令:3,15 8-11 \* \* \* command |
| 73 | + |
| 74 | +### crontab命令 |
| 75 | +命令中的`File`是命令文件的名字,在这个文件中编写了符合上述规则的计划任务,命令则表示将这个File做为crontab的任务载入到crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。载入crontab之后可以在`/var/spool/cron/[user]`文件查看计划任务信息。 |
| 76 | +```shell |
| 77 | +用法: |
| 78 | + crontab [参数] 文件 |
| 79 | + crontab [参数] |
| 80 | + |
| 81 | +常用参数: |
| 82 | + -u <user> 配置用户计划任务,默认当前用户 |
| 83 | + -e 编辑用户计划任务,默认当前用户 |
| 84 | + -l 列出用户计划任务,默认当前用户更 |
| 85 | + -r 清空用户计划任务,默认当前用户 |
| 86 | + -i 删除用户计划任务,有确认提示 |
| 87 | +``` |
| 88 | + |
| 89 | +所以,如果要把一个编写好的crontab文件添加到当前用户的计划任务,可以使用 |
| 90 | +$ crontab crontab_file |
| 91 | + |
| 92 | +### 一些示例 |
| 93 | +实例1:每1分钟执行一次myCommand |
| 94 | +\* \* \* \* \* myCommand |
| 95 | + |
| 96 | +实例2:每小时的第3和第15分钟执行 |
| 97 | +3,15 \* \* \* \* myCommand |
| 98 | + |
| 99 | +实例3:在上午8点到11点的第3和第15分钟执行 |
| 100 | +3,15 8-11 \* \* \* myCommand |
| 101 | + |
| 102 | +实例4:每隔两天的上午8点到11点的第3和第15分钟执行 |
| 103 | +3,15 8-11 \*/2 \* \* myCommand |
| 104 | + |
| 105 | +实例5:每周一上午8点到11点的第3和第15分钟执行 |
| 106 | +3,15 8-11 \* \* 1 myCommand |
| 107 | + |
| 108 | +实例6:每晚的21:30重启smb |
| 109 | +30 21 \* \* \* /etc/init.d/smb restart |
| 110 | + |
| 111 | +实例7:每月1、10、22日的4 : 45重启smb |
| 112 | +45 4 1,10,22 \* \* /etc/init.d/smb restart |
| 113 | + |
| 114 | +实例8:每周六、周日的1 : 10重启smb |
| 115 | +10 1 \* \* 6,0 /etc/init.d/smb restart |
| 116 | + |
| 117 | +实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb |
| 118 | +0,30 18-23 \* \* \* /etc/init.d/smb restart |
| 119 | + |
| 120 | +实例10:每星期六的晚上11 : 00 pm重启smb |
| 121 | +0 23 \* \* 6 /etc/init.d/smb restart |
| 122 | + |
| 123 | +实例11:每一小时重启smb |
| 124 | +\* \*/1 \* \* \* /etc/init.d/smb restart |
| 125 | + |
| 126 | +实例12:晚上11点到早上7点之间,每隔一小时重启smb |
| 127 | +0 23-7 \* \* \* /etc/init.d/smb restart |
0 commit comments