weblogic每天日志合并shell脚本 [个人记录]【转】【补】
2017-08-02 15:46
519 查看
from RogerZhu modified by King
sh logback.rb "/data/logs/" "/tmp/domain" "analysis esb"
/data/tarPath目录下暂无文件(该目录用于存放压缩后的tar文件)
/data/bea/weblogic11/user_projects/domains/zsins_domain/servers/esb_server/logs有文件
[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目录下生成日志合并后的压缩文件
所以如果直接把以上shell脚本代码贴到windows的txt文件中,再上传到linux环境,其实由于编码不一致的问题,运行该shell脚本运行会报类似错误如下:
从这个错误信息逆推,发现连打印数据都有丢失,于是怀疑是编码不一致导致的问题.
那么如何确定windows和linux环境文件的编码呢,其中一个方法就是把文件都放到windows环境中,然后用文本编辑器打开,再另存为时会显示该文件默认编码.如下图所示:
View Code
shell book
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
相关文章推荐
- shell将脚本输出结果记录到日志文件的实现
- Linux下添加shell脚本使得nginx日志每天定时切割压缩
- Shell脚本监控服务器pts登录情况记录为日志并邮件通知【CentOS 6.5】
- Linux下添加shell脚本使得nginx日志每天定时切割压缩 推荐
- Linux下添加shell脚本使得nginx日志每天定时切割压缩
- shell将脚本输出结果记录到日志文件
- shell脚本每天自动统计网站访问日志
- shell 脚本之清除日志记录
- Linux下添加shell脚本使得nginx日志每天定时切割压缩
- 【shell脚本】nginx每天自动切割日志脚本
- 【shell脚本】nginx每天自动切割日志脚本
- shell将脚本输出结果记录到日志文件
- Shell脚本启动WebLogic记录
- shell——记录个人脚本的一个进阶
- 执行shell脚本即在屏幕上输出又要记录到日志中
- shell脚本每天自动统计网站访问日志
- hadoop学习之HDFS(2.7):实例:开发shell脚本定时采集日志数据到hdfs
- shell脚本方便操作记录(持续添加)
- 简单的备份日志和自动重启tomcat的shell脚本
- Shell 脚本编写记录(1)-find的学习