banner

多用户多tomcat结合logrotate实现日志分割脚本

结合logrotate来实现tomcat日志分割,当前脚本主要解决的问题是,多用户下多tomcat环境下日志压缩及归档的问题。

因为是第一个版本,可能思路还是不太科学。如果你有更好的建议及解决方案请留言。


脚本内容

#!/bin/bash
#Version=0.1.1
#Ownr:FuShengbao
#Blog:shengbao.org
#Mail:shengbao.fu@generalichina.com
#Tel:1393 
#change log
#20180426:Initial release
#20180509:修改tomcat\w匹配、修改log_backup为root权限bug、修改第一次执行/home/app*/log_backup/tomcat*判断bug

username="app01"
for userhome in $username;do
    if [ -d /home/$userhome/log_backup ];then 
        echo "/home/$userhome/log_backup ok!"
    else 
        mkdir  /home/$userhome/log_backup
  chown -R $userhome.$userhome /home/$userhome/log_backup
    fi
done
function catalina () {
dfs=`df |awk 'NR==2''{print $4}'`
for i in $username;do
    bssc=`ls /home/$i|grep "^tomcat\w"`
    for ii in $bssc;do
        if [ ! -f /etc/custom/log/tomcatlog_catalina_$i$ii ];then
        cat > /etc/custom/log/tomcatlog_catalina_$i$ii <<EOF
/home/$i/$ii/logs/catalina.out
{
       rotate 180
       copytruncate
       olddir /home/$i/log_backup/$ii/
       nomissingok
       notifempty
       compress
       dateext
}
EOF
        fi
        if [ -f /home/$i/$ii/logs/catalina.out ];then
            dus=`du -s /home/$i/$ii/logs/catalina.out|awk -F ' ' '{print $1}'`
            echo $dus
            if [ "$dfs" -lt "$dus" ];then
                echo "One or more drives has insufficient disk space"
               sleep 2
               exit 1
            else
       if [ -d /home/$i/log_backup/$ii ];then
                    echo "runing logrote"
                    /usr/sbin/logrotate -vf /etc/custom/log/tomcatlog_catalina_$i$ii
    else 
        mkdir /home/$i/log_backup/$ii
                    /usr/sbin/logrotate -vf /etc/custom/log/tomcatlog_catalina_$i$ii
                fi       
       
            fi
        fi
    done
done
}
function log_file () {
for ia in $username;do
    bssca=`ls /home/$ia|grep "^tomcat\w"`
    for iia in $bssca;do
            if [ ! -f /etc/custom/log/tomcatlog_file_$ia$iia ];then
                    cat > /etc/custom/log/tomcatlog_file_$ia$iia <<EOF
/home/$ia/log_backup/$iia/*.txt
{
       nocreate
       rotate 180
       noolddir
       missingok
       compress
       dateext
}
/home/$ia/log_backup/$iia/*.log
{
       nocreate
       rotate 180
       noolddir
       missingok
       compress
       dateext
}
/home/$ia/log_backup/$iia/*.*.log
{
       nocreate
       rotate 180
       noolddir
       missingok
       compress
       dateext
}
/home/$ia/log_backup/$iia/*..*.txt
{
       nocreate
       rotate 180
       noolddir
       missingok
       compress
       dateext
}
EOF
        fi
        if [ -d /home/$ia/log_backup/$iia ];then
            /usr/bin/find /home/$ia/$iia/logs/ -type f -mtime +7 -exec mv {} /home/$ia/log_backup/$iia \;
                            echo "run tomcatlog_file"
                /usr/sbin/logrotate -vf /etc/custom/log/tomcatlog_file_$ia$iia
        else
            mkdir /home/$ia/log_backup/$iia 
            /usr/bin/find /home/$ia/$iia/logs/ -type f -mtime +7 -exec mv {} /home/$ia/log_backup/$iia \;
                        /usr/sbin/logrotate -vf /etc/custom/log/tomcatlog_file_$ia$iia
        fi
    done
done
}
if [ ! -d /etc/custom/log ];then
    mkdir -p /etc/custom/log
        catalina
        log_file
else
    catalina
        log_file
fi

   

交流

使用logrotate是可以实现多用户压缩到指定目录,不这样做我考录的

1,是需要写很多目录及路径。每一个用户或者目录都需要单独写。

2,执行时间多在3点左右,这样导致日志分割的日期不是那么完美。

如果,你不需要归档,只需要分割catalina.out并且目录有规律可以这么做。

#cat /etc/custom/log/tomcatlog 
/home/shengbao0*/tomcat*/logs/catalina.out
{
       rotate 180
       copytruncate
       noolddir 
       nomissingok
       notifempty
       compress
       dateext
}

添加计划任务

55 23 * * * /usr/sbin/logrotate -vf /etc/custom/log/tomcatlog

推荐阅读:

IT运维工程师学习笔记-Redis笔记(7):redis数据安全-故障处理及事务

linux下精确指定账号和密码过期时间

redhat镜像红帽iso百度云系统下载

阅读: 2313
在同意共创许可协议(CC BY-NC-SA-4.0)的前提下,您可以转载本文。
付生保个人博客
https://shengbao.org/700.html

相关阅读

留言评论

暂无留言