您的位置:首页 > 运维架构 > Shell

weblogic每天日志合并shell脚本 [个人记录]【转】【补】

2017-08-02 15:46 519 查看
from RogerZhu modified by King

sh logback.rb "/data/logs/" "/tmp/domain" "analysis esb"

相关文件下载地址

https://pan.baidu.com/s/1qY7ggW0 参见 固定脚本无参方式

目录结构如下

/data/script/logback目录下有文件(该目录用于存放需要执行的shell脚本,shell可以以任何后缀结尾,这里定义为.rb是因为editplus文本编辑器可以着色显示rb文件中的关键字)

logback.rb
logMerge.rb


/data/tarPath目录下暂无文件(该目录用于存放压缩后的tar文件)

..


/data/bea/weblogic11/user_projects/domains/zsins_domain/servers/esb_server/logs有文件

access.log
access.log00001
access.log00002
access.log00003
access.log00004
access.log00005
access.log00006
diagnostic_images
esb_server.log
esb_server.log00027
esb_server.log00028
esb_server.log00029
esb_server.log00030
esb_server.log00031
esb_server.log00032
esb_server.log00033
esb_server.out
esb_server.out00001
esb_server.out00002
esb_server.out00003
esb_server.out00004


主shell文件logback.rb

##进入logback.rb所在文件目录
logbackScriptPath=/data/script/logback/
##logbackScriptPath=$(cd "$(dirname "$0")" && pwd)该语句可以动态获取当前执行文件所在目录
##定义压缩后的tar文件存放路径
tarTargetPath=/data/tarPath/
cd $logbackScriptPath
##定义domain所在地
domainPath=/data/bea/weblogic11/user_projects/domains/base_domain
#定义域名domain/server/下的需要做日志合并的几个server文件夹名 用空格分隔,如"esb_server ilog_server"
multiServers="esb_server"
##定义当天的lock文件名
#old:    lockfile="`date +%Y%m%d`.lock"
lockfile=$(date +%Y%m%d).lock
##判断当前lockback.rb所在文件目录中是否存在lockfile文件名,如存在则表明已执行过,不存在则表明今天还未执行过
if [ -e $lockfile ]
then
echo "程序今日已执行"
exit
else
echo "backup begin"
fi

##for循环server名,当localservers = esb_server,以此类推,in中包含几个则循环几次
for serName in $multiServers
do
##创建各系统的独立目录用以放置压缩文件
systemTarPath=$tarTargetPath${serName}
if [ ! -e $systemTarPath ]
then
mkdir $systemTarPath
else
echo $systemTarPath 已存在
fi

#参数定义
#old:    back_path=`date +%Y%m%d`
#old :    back_path=`echo "${back_path}_${serName}"`
back_path=$(date +%Y%m%d)_${serName}
echo -----------------------------------------------------------absolute backPath is : $logbackScriptPath$back_path

cd $domainPath/servers

if [ ! -e $back_path ]
then
mkdir $back_path
else
echo $back_path is existed
fi

echo -----------------------------------------------------------logback pwd is $(pwd)
#调用其它shell脚本,并传2个参数,到时用$1 $2来分别取参
sh $logbackScriptPath/logMerge.rb $serName $domainPath
echo -----------------------------------------------------------logback pwd is $(pwd)

mv $domainPath/servers/$serName/logs/${serName}_$(date +%Y%m%d).out        ./$back_path/
mv $domainPath/servers/$serName/logs/${serName}_$(date +%Y%m%d).log        ./$back_path/
mv $domainPath/servers/$serName/logs/access_$(date +%Y%m%d).log            ./$back_path/

tar cvf $back_path.tar $back_path
rm -rf ./$back_path

mv ./$back_path.tar $systemTarPath
done
cd $logbackScriptPath
echo 'backup finished...' >>$lockfile


被引用shell文件logMerge.rb

#对单个server下面的access.logXXXX,esb_server.outXXX,esb_server.logXXX做日志合并
#serName=$1=esb_server  通过传参引用
serName=$1
#domainPath=$2=/data/bea/weblogic11/user_projects/domains/base_domain 通过传参引用
domainPath=$2

keepfile="${serName}.out"
keepfilelog="${serName}.log"
accesslog=access.log

# old:    newdate=`date +%Y%m%d`
newdate=$(date +%Y%m%d)

cd $domainPath/servers/$serName/logs/

ls -lrt ${keepfile}* | awk '{print $9;}' | while read filename
do
cat $filename >> ${serName}_${newdate}.out
if [ $filename != $keepfile ]
then
rm $filename
else
echo 'null' > $filename
fi
done

ls -lrt ${keepfilelog}* | awk '{print $9;}' | while read filename
do
cat $filename >> ${serName}_${newdate}.log
if [ $filename != $keepfilelog ]
then
rm $filename
else
echo 'null' > $filename
fi
done

ls -lrt ${accesslog}* | awk '{print $9;}' | while read filename
do
cat $filename >> access_${newdate}.log
if [ $filename != $accesslog ]
then
rm $filename
else
echo 'null' > $filename
fi
done

echo -----------------------------------------------------------logMerge pwd is $(pwd)


开始执行以上shell脚本,如果异常,请参考下一小节"特别声明"

控制台显示如下表示正常执行,而且在/data/script/logback目录会生成一个今日已执行的日志文件

[weblogic@dwxapptest logback]$ pwd
/data/script/logback
[weblogic@dwxapptest logback]$ sh ./logbak.rb
-----------------------------------------------------------back_path is 20170802_ping
-----------------------------------------------------------logback pwd is /data/bea/weblogic11/user_projects/domains/base_domain/servers
-----------------------------------------------------------logMerge pwd is /data/bea/weblogic11/user_projects/domains/base_domain/servers/ping/logs
-----------------------------------------------------------logback pwd is /data/bea/weblogic11/user_projects/domains/base_domain/servers
20170802_ping/
20170802_ping/access_20170802.log
20170802_ping/ping_20170802.log
20170802_ping/ping_20170802.out
[weblogic@dwxapptest logback]$

完成在/data/tarPath目录下生成日志合并后的压缩文件

20170802_esb_server.tar


特别声明-编码问题

由于windows环境生成的文件默认是ANSI编码的,而linux环境下默认的是UTF-8编码的.

所以如果直接把以上shell脚本代码贴到windows的txt文件中,再上传到linux环境,其实由于编码不一致的问题,运行该shell脚本运行会报类似错误如下:

: No such file or directoryta/script/logback/
: command not found
logback.rb: line 18: syntax error near unexpected token `else'
'ogback.rb: line 18: `else


从这个错误信息逆推,发现连打印数据都有丢失,于是怀疑是编码不一致导致的问题.

那么如何确定windows和linux环境文件的编码呢,其中一个方法就是把文件都放到windows环境中,然后用文本编辑器打开,再另存为时会显示该文件默认编码.如下图所示:

##用以下带3参数的命令启动本程序sh logback3arg.rb "/data/tarPath/" "/tmp/domain" "esb_server ilog_server"

sh /data/script/zsins_domain/logback/logback3arg.rb "/data/logs/zsins_domain_logs/" "/data/bea/weblogic11/user_projects/domains/zsins_domain" "esb_server ilog_server kingtool"

sh /data/script/zsins_domain/logback/logback3arg.rb "/data/logs/other_domain_logs/" "/tmp/domain" "analysis"


View Code

其它参考

Shell命令_Cron使用

shell book
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: