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 #重启