Linux——crontab 详解

一、CronTab介绍

cronTab就是一个定时任务的工具,比如你有一个脚本,这个脚本是对日志进行切割的,如果我们想要每天0点对日志执行一次切割,人为执行脚本太过麻烦,毕竟每天都得执行一次;CronTab工具就是为我们解决这个麻烦的,他会按照指定的时间为我们启动指定的任务脚本。

案例应用:

  • 每分钟需要执行一个脚本进行系统健康检查
  • 每天凌晨对过去一天的系统数据进行统计
  • 每周对系统日志进行备份切割
  • 每个月对系统关键数据进行备份

二、安装

yum install -y cronie crontabs

三、验证服务是否安装

检查crond服务是否安装及启动:

yum list cronie && systemctl status crond

检查crontab工具是否安装:

yum list crontabs && which crontab && crontab -l

 

四、Crond服务启动、查看、关闭的命令

systemctl start crond    # 启动 crond 服务
systemctl status crond    # 查看 crond 服务的运行状态
systemctl stop crond    # 关闭 crond 服务
systemctl restart crond    # 重新启动 crond 服务
crontab -l    // 列出所有定时任务

crontab -e    // 进入定时任务的编辑文件

 每次修改定时任务之后,都要去执行systemctl restart crond命令,以便重新加载定时任务列表。

五、文件格式

语法:[cron表达式]    [命令或脚本]

cron表达式语法格式:

Linux下的Crontab表达式有五个域,分表表示:分钟、小时、日期、月、星期。

这篇文章有对cron表达式做详细的解释:https://zhangzw.com/posts/20190428.html

示例:

0 0 10,14,16 * * ?:每天上午 10 点,下午 2 点,4 点

0 0/30 9-17 * * ?:朝九晚五工作时间内每半小时

0 0 12 ? * WED:表示每个星期三中午 12 点

六、crontab配置文件

系统配置文件

/etc/crontab

 系统用户crontab配置文件保存目录(crontab -e)

crontab -e命令,其实调用的就是vi命令,所有的定时任务都保存在/var/spool/cron/目录下,即每个用户在第一次使用crontab -e命令时,/var/spool/cron/下都会有一个与当前用户名相同的文件生成,这个生成的文件就是用来存放定时任务的。

示例:

root用户:/var/spool/cron/root

user01用户:/var/spool/cron/user01

七、环境变量

如果我们想在crontab 的定时任务中使用一些第三方的命令或者工具,我们就需要将第三方命令或者工具的绝对路径添加到/etc/crontab的PATH变量中,比如在crontab定时任务中需要使用到java命令,就需要将java的bin路径添加到PATH变量中(注:这种方式添加第三方路径,只能将定时任务配置在/etc/crontab文件中),如下:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/soft/jdk1.8/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

# 在/etc/crontab文件配置任务时,需要制定用户名
* * * * * root java -version 2> /home/test.txt

 

除了上面的直接在/etc/crontab的PATH变量中添加第三方命令或者工具的绝对路径之外,还可以使用如下方式使用第三方命令或者工具。

在执行具体任务前引入系统/用户环境变量(推荐使用这种方式)

自定义java环境变量/etc/profile.d/java.sh

# /etc/profile.d/java.sh
JAVA_HOME=/soft/jdk1.8
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib
export JAVA_HOME PATH CLASSPATH

配置定时任务时,先引入系统/用户环境变量,然后用分号隔开,在写定时任务

* * * * * source /etc/profile.d/java.sh;java -version 2> /home/test01.txt

修改完之后不要忘记执行:

systemctl restart crond

 八、日志

crontab 的日志存放在/var/log/cron文件中。

九、定时分隔catalina.out日志

创建日志分隔脚本/soft/tomcat-api/logs/auto-deal-log.sh

#!/bin/bash
# 复制(备份)当前日志文件
cp /soft/tomcat-api/logs/catalina.out /soft/tomcat-api/logs/catalina_`date -d '-1 days' +%Y%m%d`.log
# 清空catalina.out日志文件
echo "" > /soft/tomcat-api/logs/catalina.out
# 删除7天之前的日志文件
find /soft/tomcat-api/logs/ -mtime +7 -name "*" -exec rm -rf {} \;

然后配置定时任务即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值