使用前准备
Crontab简介
crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
用途:
(一) 每周日志切割备份
(二) 每天凌晨对当日数据统计
(三) 每个月备份关键数据
(四) 每天系统检查
(五) 定时发送邮件
(六)......
Crontab安装及基本语法
直接在线安装:
//清理yum缓存
yumclean all
//更新yum
yumupdate
//安装crontab
yuminstall –y cronie crontabs
//检查crond服务是否安装及启动
yumlist cronie && systemctl status crond
有提示active则为服务安装成功。
//检查crontab工具是否安装
yum listcrontabs && which crontab && crontab –l
解释:
yum listcrontabs:检查crontabs是否安装,
&&:是前面的语句成立才会往后面执行
whichcrontab:crontab安装的路径
crontab–l:当前的任务列表,会显示配置的任务列表,如没有则会显示一行空白
//进入到crontab配置文件,并可以配置定时规则和需要执行的语句
crontab–e
//配置任务完成,重启crond
systemctlrestart crond
//查看crond状态
systemctlstatus crond
配置文件
在我们使用 Crontab –e 编辑定时任务时实际上是编辑的这个/var/spool/cron/user文件,后面的user是指当前登录的用户,如用root登录,那么实际的任务配置文件就是/var/spool/cron/root文件。
系统配置文件路径:/etc/crontab
Crontab在执行时,会先查看系统配置文件里面的任务,然后再去查看用户下面的配置文件
环境变量
Crontab不仅支持shell语句,也支持像java等第三方工具命令。如使用java语句,需要添加环境变量。
第一种添加方式,直接加到配置文件里面:
添加path到/etc/crontab
PATH=/sbin:/bin:usr/usr/local/jdk1.8/bin
第二种,在执行具体任务时,引入系统环境变量/用户环境变量【前提是系统环境变量里已经提前设置了第三方工具变量】:
//定时执行test.sh,并在执行前引入系统环境变量
* * ** * source /etc/profile; sh /root/test.sh
//定时执行test.sh,并在执行前引入用户环境变量
* * ** * source /root/.bash_profile; sh /root/test.sh
Crontab系统日志
Crontab日志保存在/var/log/cron下面,在执行任务时如果出错可以查看日志。
//查看日志文件最近的10行日志信息
tail–n 10 /var/log/cron
crontab语法
Crontab语法格式
Crontab基本格式如下:
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列代表要运行的命令。
* :代表该位置的所有可用的数字
/ :代表每的意思 */5 如在分的位置,则代表每5分钟
- 代表区间,5-10如在分的位置,代表第5到第10分钟
,:代表分割,5,10如在分的位置,代表第2和第10分钟
如果是直接*****则代表每分钟执行一次
注意每一行一个任务,且*****和command之间必须空格隔开
Crontab语法例子
30 21* * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。
45 41,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1* * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。
0,3018-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23* * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。
0 */1* * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache
023-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
0 114 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
0 4 1jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache
* * ** * echo –e “test” > /root/test.out
每分钟将”test”写入到root下面的test.out文件里面,>是重定向符号
Crontab实例
定时清理系统日志
//查看当前目录下各种文件大小
du –sh *
//每天凌晨1点清空一遍messages日志文件
* 1 ** * cat /dev/null > /var/log/message
/dev/null代表空设备文件,相当于把空输出到message,也就是清除。
如果需要清除多个文件,可以定时执行脚本。
* 1 ** * sh /root/log_clean.sh
脚本文件如下:log_clean.sh
#!/bin/sh
cat /dev/null > /var/log/message
cat /dev/null > /var/log/sthlog
定时备份文件
备份脚本如下:/data/backup.sh
#!/bin/sh
basedir = /data/backup
backup_file = $basedir/backup_file/$(date+%F_%H%M)
[ ! –d “$backup_file” ] && mkdir –p $backup_file
cd /data
tar –jpcf $backup_file/backup.tar.bz2 backup
上述脚本将backup文件夹打包备份到backup_file下面,并以日期命名了一个文件夹。
//判断$backup_file该路径是否存在,如不存在则创建一个该路径
[ ! –d“$backup_file” ] && mkdir –p $backup_file
创建crontab任务:
$ crontab–e
写入以下任务:
* * ** * sh /data/backup.sh
//配置任务完成,重启crond
systemctlrestart crond
//查看crontable任务
crontab–l