logrotate和cron分割日志

tomcat在默认运行中,会向catalina.out输出大量日志,导致这个文件越来越大,为了解决这个问题,引入了logrotate工具来管理这个日志文件
logrotate程序是一个日志文件管理工具,用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据天数来转储,这个过程一般通过cron程序来执行。

安装
yum install logrotate
yum intall cron

安装后系统会定时运行logrotate,一般是每天一次。crontab会每天定时执行/etc/cron.daily目录下的脚步,而这个目录下有个logrotate文件,在centos的配置:
less /etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

此文件中只是执行了logrotate命令,然后传递一个配置参数。我们可以新建自己的脚本来执行logrotate命令,然后把脚本加入crontab中,就可以自定义文件分割了。

logrotate参数
参数描述
compress通过gizp压缩转储以后的日志
nocompress不进行压缩
copytruncate用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate备份日志文件但是不截断
create mode owner group转储文件,使用指定的文件模式创建新的日志文件 例如:create 0777 tomcat tomcat
nocreate不创建新的日志文件
delaycompress一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress覆盖 delaycompress 选项,转储同时压缩。
errors address专储时的错误信息发送到指定的Email 地址
ifempty即使是空文件也转储,这个是 logrotate 的缺省选项
notifempty如果是空文件的话,不转储
mail address把转储的日志文件发送到指定的E-mail 地址
nomail转储时不发送日志文件
olddir directory转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily指定转储周期为每天
weekly指定转储周期为每周
monthly指定转储周期为每月
rotate count指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size size当日志文件到达指定的大小时才转储,后缀MB.
实际应用
/opt/server/tomcat*/logs/catalina.out {
    rotate 30
    daily
    dateext
    copytruncate
    compress
    missingok
    notifempty
    nomail
    create 0777 tomcat tomcat
    su tomcat tomcat
}

调用脚本

/usr/sbin/logrotate -vf ./conf/tomcat-catalina.conf >> ./logrotate.log

加入crontable:内容如下

crontab -e

配置调用定时

10 0 * * * bash /opt/tools/tomcat.sh
cron和crontab命令详解
cron机制:

cron可以让系统在指定的时间,去执行某个指定的工作,我们可以使用crontab指令来管理cron机制

crontab参数:
crontab: invalid option -- '-'
crontab: usage error: unrecognized option
Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user #可以让我们去编辑其他人的crontab,如果没加就是开启自己的crontab,如:crontab -u tomcat
 -e         edit users crontab    #可以使用系统预设的编辑器,开启crontab
 -l         list users crontab     #列出crontab的内容
 -r         delete users crontab   #移除crontab
 -i         prompt before deleting  #移除crontab,会跳出系统信息让你再次确定是否移除crontab
 -n <host>  set host in cluster to run users crontabs
 -c         get host in cluster to run users crontabs
 -s         selinux context
 -x <mask>  enable debugging
cron时间格式
参数minute(分)hour(小时)day of month(日期)month(月份)day of week(星期)命令
说明0-59 分0-23 小时1-31号1-12月0-7,其中0和7都代表星期天,或使用名称,例sun、mon要执行的命令
举例
每5分钟*/5****
5分钟5****
每小时0****
每天00***
每周00**0
每月001**
每年0011*
cron权限配置

/etc/cron.allow  白名单:
/etc/cron.deny 黑名单:如果用户在这里,将不能使用cron机制

用法:

  • 1、如果来年各个文件都不存在,则只有root用户才能使用crontab命令
  • 2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里面的用户才能使用crontab命令,如果root用户也不在,则root用户也不能使用crontab
  • 3、如果cron.allow不存在但cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其他用户都能使用
  • 4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件都有同一用户,以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。
crontab配置

/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

crontab服务命令

systemctl reload crond     #重新载入配置
systemctl status crond      #查询状态
systemctl start crond       #启动
systemctl stop crond        #停止
systemctl restart crond     #重启
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值