一、简述
定时任务其实就是定点执行某个任务,常见的场景有定时备份文件、定时同步时间、定时爬虫等。
二、定时任务书写格式
* * * * * [command to be executed]
#配置文件详解
~]# cat /etc/crontab
SHELL=/bin/bash #执行命令解释器
PATH=/sbin:/bin:/usr/sbin:/usr/bin #环境变量
MAILTO=root #定时任务执行邮件发给指定用户
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59) #0-59分钟
# | .------------- hour (0 - 23) #0-23小时
# | | .---------- day of month (1 - 31) #1-31天
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... #1-12月
# | | | | .---- day of week (0 - 6) #0-6周
# | | | | |
# * * * * * user-name command to be executed
#符号解释
* 代表任意的(分,时,日,月,周)时间都执行
- 表示一个时间范围,时间段,例:5-7
, 表示分隔时间段,例:6,0,4表示每周六,日,四都执行
*/1 表示每隔多长时间执行一次,例:*/10 表示每隔10分钟执行一次
三、crontab 命令使用方法
-e参数:编辑定时任务
-l参数:查看定时任务
-r参数:删除定时任务
-u参数:指定其他用户
四、定时任务指定时间示例
00 02 * * * 每天凌晨2点整执行
00 02 1 * * 每月1号凌晨2点整执行
00 02 14 2 * 每年的2月14号凌晨2点整执行
00 02 * * 7 每周日凌晨2点整执行
00 02 * 6 5 每年6月每周5凌晨2点整执行
00 02 14 * 7 每月14号凌晨两点整执行,或者每月周日凌晨2点整执行。
00 02 14 2 7 每年2月14日凌晨2点整执行,或每年2月的每周日凌晨2点整执行。
*/10 02 * * * 每天从凌晨2点开始,每10分钟执行一次
* * * * * 每分钟执行一次
00 00 14 2 * 每年2月14日凌晨12点整执行
*/5 * * * * 每5分钟执行一次
00 02 1-8 * * 每月1号到18号凌晨2点整都执行
0 21 * * * 每天21点整执行一次
45 4 1-10 * * 每月1号到10号的凌晨4点45分执行
3,15 8-11 */2 * * 每两天8点到11点的3分和15分各执行一次
0 23-7/1 * * * 每天的23号到凌晨7点,每隔1小时执行一次。
15 21 * * 1-5 每周1到周5,21点15分执行
* 02 * * 7 每周日凌晨2点开始执行,2点的每1分钟都执行一次
00 02 * 1,2,8 * 每年1月,2月,8月的凌晨2点整都执行一次
45 4 1,10,22 * * 每月的1号,10号,22号的凌晨4点45分执行。
五、限制某个用户使用定时任务
~]# cat /etc/cron.deny
test
~]# su - test
~]$ crontab -e
You (test) are not allowed to use this program (crontab)
See crontab(1) for more information
六、注意事项
1.编写定时任务时需添加备注
2.将需要定期执行的任务写入脚本中。避免出现字符相关问题。例如:
*/1 * * * * /usr/bin/touch /home/test/$(date +%F%s).txt
在定时任务中会将 % 当作换行符,无法被执行。需要将 % 添加转义符,正确书写方式:
*/1 * * * * /usr/bin/touch /home/test/$(date +\%F\%s).txt
3.定时任务尽量将输出重定向到 /dev/null,避免影响终端正常使用
4.在编辑定时任务时,命令一定要使用绝对路径