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 addres s专储时的错误信息发送到指定的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 * * * *
每天 0 0 * * *
每周 0 0 * * 0
每月 0 0 1 * *
每年 0 0 1 1 *
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     #重启

你可能感兴趣的:(linux)