Linux定时任务crontab学习总结

使用前准备

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


猜你喜欢

转载自blog.csdn.net/qq_29534483/article/details/80784042
今日推荐