1、简介
Linux 系统定时任务则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。
crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
2、Crontab的工作原理
当用户使用crontab命令新建任务计划之后,该项 jobs 就会被 /var/spool/cron/ 目录下,而且以用户账号来创建一个文件,每一项任务计划为一行。
crond 检测的时间周期是 “分钟”, 每分钟会读取一次 /etc/crontab, 以及 /var/spool/cron 里面的记录并执行。
crond 执行的每一项任务计划,都会被记录到 /var/log/cron 这个日志文件。
3、Crontab格式说明
4、Crontab命令语法
crontab [-u user] file crontab [-u user] [ -e | -l | -r ]
-u user用来设定某个用户的crontab服务。
-file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。
以下是可以用于指定时间的特殊符号:
"*" 代表所有的取值范围内的数字,任何时刻都接受。特别要注意!
"*/n" 表示每n个单位间隔
"-" 时间范围
"," 分隔的时段
5、Crontab计划任务的格式
格式:分 时 天 月 周 用户 任务
第1列分钟0~59
第2列小时0~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~7(0和7表示星期天)
第6列要运行的命令
6、环境准备
准备一台Centos6服务器
系统: Centos6.8 Centos6.5
内存:1G
cpu: 2核
IP地址: 10.0.0.53
crontab -e
编辑rontab文件内容
# 每天的凌晨2点执行重启阿帕奇服务
00 02 * * * service httpd restart
# 查看当前有几条计划任务
crontab -l
# 每个月的15号凌晨三点半重启服务器
30 03 15 * * reboot
# 每周日的凌晨一点半
30 01 * * 7
# 每年八月份的每个周二凌晨的五点半
30 05 * 8 2
# 每天的凌晨十二点
00 00 * * *
# 每天凌晨六点
00 06 * * *
# 每月13号的早上六点
00 06 13 * *
# 每周周二六点
00 06 * * 2
# 每年12月的周三的下午的三点半
30 15 * 12 3
3 * * * * 每小时的第3分钟
3 * * * 7 每个周日的每小时的第3分钟
3 12 * * * 每天的12点3分
3 12 * * 5 每周五的12点3分
3 12 6 * * 每月6号的12点3分
3 12 6 7 * 每年7月6号的12点3分
,:离散时间点取值
10 ,40 * * * * 每小时的第10分钟和第40分钟
10 ,40 * * * 2,5 每周二和周五的每小时的第10分钟和第40分钟
-:连续时间点
10 02 * * * 1-5 每周一到五的2点10分
/:对应取值范围每多久一次
*/3 * * * * 每3分钟
# 进到这个目录下
cd /var/spool/cron/
# 创建用户
useradd tom
# 切换用户
su tom
# 编辑计划任务文件
crontab -e
30 01 * * * ls /root/
crontab -u tom -l
ls
# 创建目录
mkdir /backup
# 安装数据库服务
yum -y install mysql mysql-server
# 创建脚本文件
vim mysql_backup.sh
#!/bin/bash
mysqldump -uroot -p123 -B wg > /backup/wg.sql
crontab -e
# 每一分钟执行备份数据库脚本
*/1 * * * * sh /root/mysql_backup.sh
# 查看日志
tail -f /var/log/cron
# 进入目录,库以及备份上了
cd /backup/