weblogic每天日志合并shell脚本 [个人记录]【转】【补】
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=$=esb_server 通过传参引用
serName=$
#domainPath=$=/data/bea/weblogic11/user_projects/domains/base_domain 通过传参引用
domainPath=$ 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环境中,然后用文本编辑器打开,再另存为时会显示该文件默认编码.如下图所示:

那么我们如何把ANSI文件转换成UTF-8文件呢,可按如下两步骤:
- 把windows下的文件上传到linux系统
- 在linux系统中,在当前文件所在目录执行以下语句,把ANSI转成UTF8
iconv -f GBK -t UTF-8 logback.rb > logbackUTF-8.rb
iconv参考资料
http://blog.csdn.net/s1070/article/details/52302713
http://blog.csdn.net/w1242245/article/details/20483183
此时再把该logbackUTF-8.rb文件拉取到windows,会发现已经是UTF-8编码的了.
用vi编缉器也可以对比出前后差异,发现原始logback.rb会乱码,而logbackUTF-8.rb显示正常

但是linux下执行sh logback.rb还是报错,仔细对比之前linux环境成功的脚本文件,发现没有特别地差异了,于是还是怀疑windows环境修改的文件到linux后导致了异常.
于是用vi -b logback.rb查看文件发现后面多了^M (之前遇到过这个问题)
[weblogic@dwxapptest logback]$ vi -b logback.rb ##进入lockback.rb所在文件目录^M
logbackScriptPath=/data/script/logback/^M
##定义压缩后的tar文件存放路径^M
tarTargetPath=/data/tarPath/^M
cd $logbackScriptPath^M
##定义domain所在地^M
domainPath=/data/temp/domain^M
#定义域名domain/server/下的需要做日志合并的几个server文件夹名 用空格分隔,如 esb_server ilog_server^M
multiServers=esb_server ^M
##定义当天的lock文件名^M
#old: lockfile="`date +%Y%m%d`.lock"^M
lockfile=$(date +%Y%m%d).lock^M
##判断当前lockback.rb所在文件目录中是否存在lockfile文件名,如存在则表明已执行过,不存在则表明今天还未执行过^M
if [ -e $lockfile ] ^M
then^M
echo "程序今日已执行" >> $lockfile^M
#exit^M
else ^M
echo "backup begin" >>$lockfile^M
fi^M
看来就是这些^M搞的鬼了,接下来我们去掉这些^M,用以下链接中的三种方式都可去掉.在此不详述.
http://www.cnblogs.com/whatlonelytear/articles/7269202.html(我的笔记)
syntax error near unexpected token 脚本报错误解决
最后成功执行shell脚本.
由于合并的是每天的日志,所以需要把2个shell脚本做成定时任务,每晚23:55:00左右开始执行一次
我的logback3arg.rb记录
##用以下带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"
其它参考
weblogic每天日志合并shell脚本 [个人记录]【转】【补】的更多相关文章
- shell脚本技巧记录
2014/4/9 shell脚本变量处理: ${varible##*string} //从左向右截取最后一个string后的字符串 ${varible#*string} //从左向右截取第一个stri ...
- 怎么归档老日志的shell脚本
本脚本来自有学习阿铭的博文学习:工作中,需要用到日志切割logrotate,按照各自的需要切割.定义保留日志.提示:本文中的S全部都$符,不要问为什么,马云爸爸的社区就这样. #用途:日志切割归档.按 ...
- 使用RMAN和控制文件备份删除归档日志的SHELL脚本--RED HAT 5 LINUX 64
在ORACLE用户下的定时器设置 [oracle@SHARKDB dbscripts]$ crontab -l# minute hour day month week15 1 * * 0 sh / ...
- 日志类shell脚本
Apache日志文件切割 #!/bin/bash year=`date -d '-1 day' +%Y` month=`date -d '-1 day' +%m` day=`date -d '-1 d ...
- shell脚本使用记录
一些比较功能需求比较简单的可以考虑使用shell脚本来写,这样可以方便快捷稳定 1. 读取文件值,根据文件值1 或 0 来开启和关闭某些程序 a. while : do done 是无限循环. b. ...
- tomcat切割日志的shell脚本
#!/bin/bash cd /usr/tomcats/ d=`date +%F` m1=`date -d'1 month ago' +%F` ` do cd tomcat808"$i&qu ...
- shell 脚本使用记录
2019-03-26 需求是:因为遇到一些测试偶发性的出现,比如执行了20次会出一次错误,然后就顺手写了一个小脚本,用来判断执行了 n 次,是否出现错误.根据正则来匹配出substring value ...
- 日志备份shell脚本
脚本注释已经很清楚了,就不再啰嗦了. 算了,还是多说一句吧,脚本设计完成之后,就可以加入计划任务,让电脑帮你打工了. 注:关于计划任务crontab,我会专门写一篇笔记. 最最最后一句, find $ ...
- shell脚本使用记录一:操作文件
一,连接远程数据库(保证在服务器上能使用mysql命令行,至少要安装mysql客户端) #!/bin/bash HOSTNAME="ip" PORT=" USERNAME ...
随机推荐
- Marriage Match II HDU - 3081(二分权值建边)
题意: 有编号为1~n的女生和1~n的男生配对 首先输入m组,a,b表示编号为a的女生没有和编号为b的男生吵过架 然后输入f组,c,d表示编号为c的女生和编号为d的女生是朋友 进行配对的要求满足其一即 ...
- bzoj 2038: [2009国家集训队]小Z的袜子(hose) (莫队)
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- hiho1255 Mysterious Antiques in Sackler Museum
题目链接:http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf 题目大意:给你四个矩形,判断是否能取其中任意三个组成一个大矩 ...
- 【 HDU2966 】In case of failure(KD-Tree)
BUPT2017 wintertraining(15) #5E HDU - 2966 题意 给平面直角坐标系下的n个点的坐标,求离每个点和它最近点的距离的平方.\(2 \le n \le 10^5\) ...
- Codeforces访问提速攻略(小技巧)
update 这篇文章已废,因为有了 http://m1.codeforces.com codeforces是不是很慢呢?反正蒟蒻打比赛的时候经常几分钟打不开题面然后就被吊打了... 于是几番周折整理 ...
- 自学Python4.7-生成器(方式一:生成器函数)
自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...
- zabbix3.2添加web页面监控(Web monitoring)
应用场景: 存在一种情况:nginx或者httpd服务本身运行正常,但是网页挂了,类似于网页被黑,或者40X之类的... 可以用zabbix把web页面访问也监控起来,第一时间得知web崩溃信息并做相 ...
- 解决使用jedis连接是报DENIED Redis is running in protected mode错误
DENIED Redis is running in protected mode because protected mode is enabled, no bind address was spe ...
- Servlet -- 中文乱码解决
请求:对于get和post都有效果 request.setCharacterEncoding("UTF-8"); 相应: 设置服务器输出的编码为UTF-8 response.set ...
- 网上找的Backbone.js
// Backbone.js 0.9.2 // (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc. // Backbone may be freely ...