#!/bin/sh

###################
#### 环境变量 ###
################### #主程序目录
#APP_HOME=/apps/svr/apache-tomcat-7.0./webapps
APP_HOME=/apps/svr/tomcat/webapps #要解析的文件目录
APP_JENKINS_HOME=/apps/$(date +%Y%m%d)
APP_ROOT=XX
APP_NAME_01=XXX_01
APP_NAME_02=XXX_01
APP_NAME_03=XXX_01 #创建临时文件夹,用来存放解压后的文件
mkdir -p /tmp/$APP_ROOT #需要替换的内容(old/new----原/新)
#old_value_1=10.101.0.20
#new_value_1=192.168.52.20 #old_value_2=127.0.0.1
#new_value_2=192.168.52.20 #old_value_3=classpath:
#new_value_3=file:\/apps\/javaconf\/common\/ #--------------------------------------------------------------------------------- #执行shell脚本log文件输出目录
#APP_LOG=/home/shell_log/filesMonitor.log #首先将jenkins生成的war包全部复制到APP_JENKINS_HOME目录下
#若今天之前已经生成过war包时,备份这些war包
ls -l $APP_JENKINS_HOME/*.war 1>/dev/null 2>/dev/null
if [ $? = 0 ]
then
mkdir -p $APP_JENKINS_HOME.bak
cp -f $APP_JENKINS_HOME/*.war $APP_JENKINS_HOME.bak/
fi mkdir $APP_JENKINS_HOME
#cp /apps/svr/jenkins/workspace/test_BM2.0/bm-web/target/*.war /apps/$(date +%Y%m%d)
cp /apps/svr/jenkins/workspace/test_$APP_ROOT/$APP_NAME_01/target/$APP_NAME_01.war /apps/$(date +%Y%m%d)
cp /apps/svr/jenkins/workspace/test_$APP_ROOT/$APP_NAME_02/target/$APP_NAME_02.war /apps/$(date +%Y%m%d)
cp /apps/svr/jenkins/workspace/test_$APP_ROOT/$APP_NAME_03/target/$APP_NAME_03.war /apps/$(date +%Y%m%d) ##########################################
### 循环遍历文件,并且修改里面的内容######
##########################################
for file in `ls ${APP_JENKINS_HOME}/*.war`
do
echo "------------------ begin ------------------------"
echo "开始遍历文件[$file]... "
if [ -f $file ]; then
#解压文件
echo "[$(date +'%F %H:%M:%S')]准备解压文件 $file unzip -oq ..."
unzip -oq $file -d /tmp/$APP_ROOT
if [ $? -eq 0 ]; then
echo "[Success]"
echo "[$(date +'%F %H:%M:%S')]解压文件成功!准备执行下一指令 sed -i..."
else
echo "解压文件[Failed]"
break;
fi
#修改文件
echo "[$(date +'%F %H:%M:%S')]开始替换文件里面的内容."
#数据源
if [[ $file == *$APP_NAME_01* ]]; then
sed -i 's/classpath:/file:\/apps\/javaconf\/$APP_NAME_01\//g' /tmp/$APP_ROOT/WEB-INF/classes/spring/application-hibernate.xml
sed -i 's/file:\/apps\/javaconf\/common\//file:\/apps\/javaconf\/$APP_NAME_01\//g' /tmp/$APP_ROOT/WEB-INF/classes/spring/application-hibernate.xml
elif [[ $file == *$APP_NAME_02* ]]; then
sed -i 's/classpath:/file:\/apps\/javaconf\/$APP_NAME_02\//g' /tmp/$APP_ROOT/WEB-INF/classes/spring/application-hibernate.xml
sed -i 's/file:\/apps\/javaconf\/common\//file:\/apps\/javaconf\/$APP_NAME_02\//g' /tmp/$APP_ROOT/WEB-INF/classes/spring/application-hibernate.xml
elif [[ $file == *$APP_NAME_03* ]]; then
sed -i 's/classpath:/file:\/apps\/javaconf\/$APP_NAME_03\//g' /tmp/$APP_ROOT/WEB-INF/classes/spring/application-hibernate.xml
sed -i 's/file:\/apps\/javaconf\/common\//file:\/apps\/javaconf\/$APP_NAME_03\//g' /tmp/$APP_ROOT/WEB-INF/classes/spring/application-hibernate.xml
fi
#重新打包,并复制到原目录,替换以前的war包
cd /tmp/$APP_ROOT/
jar -cvfM0 $file ./
if [ $? -eq 0 ]; then
echo "[$(date +'%F %H:%M:%S')]文件[$file]重新压缩成功,准备执行下一指令 rm -rf..."
else
echo "压缩文件[$file][Failed]"
fi
#清理临时文件,为解压下一个文件准备
rm -rf /tmp/$APP_ROOT/*
echo "$file ....OK"
fi
echo "------------------- end -------------------------"
done #copyFiles()-->复制文件到tomcat/webapps目录
#步骤: 1)删除webapps下面的主程序文件,包含已解压的文件和war包
# 2)将jenkins下的文件cpoy到webapps下,这里使用 '\cp'指令处理不提示覆盖
# 因为在Linux下默认cp命令是有别名(alias cp='cp -i')的,无法强制覆盖,
# 即使你用 -f 参数也无法强制覆盖文件,还是会有系统提示是否覆盖。
#
#
#
#---------------------------------------------------------------------------- echo "------------------ begin ----------------------------"
#切换到主目录
echo "[info][$(date +'%F %H:%M:%S')] 切换到主目录$APP_HOME"
cd $APP_HOME
#删除tomcat下主程序文件
echo "[info][$(date +'%F %H:%M:%S')] 删除主目录$APP_HOME下以'$APP_NAME_01'开头的文件"
rm -rf $APP_NAME_01*
rm -rf $APP_NAME_02*
rm -rf $APP_NAME_03*
#切换到jenkins主目录
echo "[info][$(date +'%F %H:%M:%S')] 切换到主目录$APP_JENKINS_HOME"
cd $APP_JENKINS_HOME
#复制文件到主目录
echo "[info][$(date +'%F %H:%M:%S')] 复制文件到主目录$APP_HOME"
cp $APP_NAME_01*.war $APP_HOME
cp $APP_NAME_02*.war $APP_HOME
cp $APP_NAME_03*.war $APP_HOME
echo "------------------- end --------------------------"

#tomcat关闭应用

#!/bin/sh
#Date://
#
#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,
#也可以作为启动java程序的独立脚本来使用。 #注意:
#)直接在Linux/UNIX上面创建并编写shell脚本
# 这是因为Windows下编写的*.sh文档格式和编码,是Linux/UNIX所不能完全承认的
# 最直接的体现就是使用过程中会遇到很多似是而非的错误,这曾经搞疯了一大片人
#)编写完*.sh之后,记得[chmod *.sh],否则会提示无法执行or没有权限执行等. #警告:
#该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。
#在杀死进程前,未作任何条件检查。在某些情况下,如程序正在进行文件或数据库写操作,
#可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本,
#增加在执行kill命令前的一系列检查。 ###################################################
#环境变量及程序执行参数 ####
#需要根据实际环境以及Java程序名称来修改这些参数####
################################################### #JDK所在路径
#JAVA_HOME="/apps/svr/jdk1.6.0_26" #JVM启动参数
#-server:一定要作为第一个参数,在多个CPU时性能佳
#-Xloggc:记录GC日志,这里建议写成绝对路径,如此便可在任意目录下执行该shell脚本
#JAVA_OPTS="-Duser.timezone=GMT+8 -server -ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m" #Tomcat目录
#APP_TOMCAT=/apps/svr/apache-tomcat-7.0.
APP_TOMCAT=/apps/svr/tomcat #Tomcat主程序目录
APP_HOME=$APP_TOMCAT/webapps/ #Tomcat缓存目录
Tomcat_Cache=$APP_TOMCAT/work #Shell执行输出日志
APP_LOG=/home/shell_log/tomcatMonitor.log ########################################################################################
#函数 初始化pid(全局)
#getTradeProtalPID()-->获取Java应用的PID
#说明:通过JDK自带的JPS命令及grep命令,准确查找Java应用的PID
#其中:[jps -l]表示显示Java主程序的完整包路径
#awk命令可以分割出PID($1部分)及Java主程序名称($2部分)
#例子:[$JAVA_HOME/bin/jps -l | grep $APP_MAIN]-->>[ com.cucpay.tradeportal.MainApp]
#另外:用这个命令也可以直接取到程序的PID-->>[ps aux|grep java|grep $APP_MAIN|grep -v grep|awk '{print $2}']
#-------------------------------------------------------------------------------------------------------------
#初始化全局变量tradePortalPID,用于标识交易前置系统的PID,0表示未启动
tradePortalPID= getTradeProtalPID(){
echo "[$(date +'%F %H:%M:%S')] 正在获取tomcat服务的PID..."
javaps=$(ps -ef |grep tomcat |grep -w 'apps/svr\/tomcat\/conf'|grep -v 'grep'|awk '{print $2}')
echo "[$(date +'%F %H:%M:%S')] Tomcat服务的(PID=$javaps)"
if [ -n "$javaps" ]; then
#赋值
tradePortalPID=$javaps
echo "[$(date +'%F %H:%M:%S')](PID=$tradePortalPID)"
else
tradePortalPID=
fi
} #-------------------------------------------------------------------------------------------------------------
#shutdown()-->停止Java应用程序
#步骤:)调用getTradeProtalPID()函数,刷新$tradePortalPID全局变量
# )若程序已经启动($tradePortalPID不等于0),则开始执行停止程序操作,否则提示程序未运行
# )使用[kill - PID]命令强制杀掉进程
# )使用[$?]获取上一句命令的返回值,若其为0,表示程序已停止运行,则打印[Success],反之则打印[Failed]
# )为防止Java程序被启动多次,这里增加了反复检查程序进程的功能,通过递归调用shutdown()函数的方式,反复kill
#注意:Shell编程中,[$?]表示上一句命令或者上一个函数的返回值
#-------------------------------------------------------------------------------------------------------------
getTradeProtalPID
echo "----------------------------- begin -----------------------------------------"
echo "[info]-[$(date +'%F %H:%M:%S')] Stopping tomcat..."
if [ $tradePortalPID -ne ]; then
echo -n "Stopping PID=$tradePortalPID"
kill - $tradePortalPID
echo "[kill 掉进程: $tradePortalPID]"
if [ $? -eq ]; then
echo "[info]-[$(date +'%F %H:%M:%S')]-->[Success]"
else
echo "[info]-[$(date +'%F %H:%M:%S')]-->[Failed]"
fi
sleep
#清除缓存
rm -rf $Tomcat_Cache
getTradeProtalPID
if [ $tradePortalPID -ne ]; then
shutdown
fi
else
echo "[info]-[$(date +'%F %H:%M:%S')] Tomcat is not running"
fi
echo "----------------------------- end -----------------------------------------" #输出日志
#getTradeProtalPID>>$APP_LOG

#tomcat启动

#!/bin/sh
#Date://
#
#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,
#也可以作为启动java程序的独立脚本来使用。 #注意:
#)直接在Linux/UNIX上面创建并编写shell脚本
# 这是因为Windows下编写的*.sh文档格式和编码,是Linux/UNIX所不能完全承认的
# 最直接的体现就是使用过程中会遇到很多似是而非的错误,这曾经搞疯了一大片人
#)编写完*.sh之后,记得[chmod *.sh],否则会提示无法执行or没有权限执行等. ###################################################
### 环境变量及程序执行参数 ####
#需要根据实际环境以及Java程序名称来修改这些参数####
################################################### #JDK所在路径
#JAVA_HOME="/apps/svr/jdk1.6.0_26" #JVM启动参数
#-server:一定要作为第一个参数,在多个CPU时性能佳
#-Xloggc:记录GC日志,这里建议写成绝对路径,如此便可在任意目录下执行该shell脚本
#JAVA_OPTS="-Duser.timezone=GMT+8 -server -ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m" #tomcat名称
#APP_TOMCAT_NAME=apache-tomcat-7.0.
APP_TOMCAT_NAME=tomcat
#Tomcat目录
APP_TOMCAT=/apps/svr/$APP_TOMCAT_NAME #Tomcat主程序目录
APP_HOME=$APP_TOMCAT/webapps/ #Tomcat启动
Tomcat_Start=$APP_TOMCAT/bin/startup.sh #Tomcat缓存目录
Tomcat_Cache=$APP_TOMCAT/work/ #Shell执行输出日志
APP_LOG=/home/shell_log/tomcatMonitor.log ########################################################################################
#函数 初始化pid(全局)
#getTradeProtalPID()-->获取Java应用的PID
#说明:通过JDK自带的JPS命令及grep命令,准确查找Java应用的PID
#其中:[jps -l]表示显示Java主程序的完整包路径
#awk命令可以分割出PID($1部分)及Java主程序名称($2部分)
#例子:[$JAVA_HOME/bin/jps -l | grep $APP_MAIN]-->>[ com.cucpay.tradeportal.MainApp]
#另外:用这个命令也可以直接取到程序的PID-->>[ps aux|grep java|grep $APP_MAIN|grep -v grep|awk '{print $2}']
#-------------------------------------------------------------------------------------------------------------
#初始化全局变量tradePortalPID,用于标识交易前置系统的PID,0表示未启动
tradePortalPID= getTradeProtalPID(){
echo "[$(date +'%F %H:%M:%S')] 正在获取tomcat服务的PID..."
javaps=$(ps -ef |grep tomcat |grep -w 'apps/svr\/tomcat\/conf'|grep -v 'grep'|awk '{print $2}')
echo "[$(date +'%F %H:%M:%S')] Tomcat服务的(PID=$javaps)"
if [ -n "$javaps" ]; then
#tradePortalPID='echo $javaps | awk '{print $}''
tradePortalPID=$javaps
echo "[$(date +'%F %H:%M:%S')](PID=$tradePortalPID)"
else
tradePortalPID=
fi
} #-------------------------------------------------------------------------------------------------------------
#startup()-->启动Java应用程序
#步骤:)调用getTradeProtalPID()函数,刷新$tradePortalPID全局变量
# )若程序已经启动($tradePortalPID不等于0),则提示程序已启动
# )若程序未被启动,则执行启动命令
# )启动命令执行后,再次调用getTradeProtalPID()函数
# )若步骤4执行后,程序的PID不等于0,则打印[Success],否则打印[Failed]
#注意:[echo -n]表示打印字符后,不换行 echo "--------------------------- begin -----------------------------"
getTradeProtalPID
#如果PID不等于0
if [ $tradePortalPID -ne ]; then
echo "[$(date +'%F %H:%M:%S')] Tomcat is not running"
else
echo -n "Starting tomcat..."
#启动Tomcat
source /etc/profile
$Tomcat_Start
sleep
echo "--------------------------------------------------------"
getTradeProtalPID
if [ $tradePortalPID -ne ]; then
echo "[$(date +'%F %H:%M:%S')](PID=$tradePortalPID)...[Success]"
else
echo "[$(date +'%F %H:%M:%S')][Failed]"
fi
echo "------------------------ end --------------------------------"
fi #日志输出
#startup>>$APP_LOG

#判断前一条shell命令是否成功

if [[ $? != 0 ]]; then

cd /

else

cd /boot

fi

$? 表示上一条shell命令是否成功,如果成功$? 等于 0, 如果不成功, $? 不等于 0

记录:

在linux中使用时,可能会出现cd 目录,但是,过去之后想快速返回之前的目录下去,可以使用cd - 这样的方式进行快速返回到cd 前的目录下去

常用shell命令实战的更多相关文章

  1. Windows常用shell命令大全

    Windows常用shell命令大全 基于鼠标操作的后果就是OS界面外观发生改变, 就得多花学习成本.更主要的是基于界面引导Path与命令行直达速度是难以比拟的.另外Geek很大一部分是键盘控,而非鼠 ...

  2. Linux Shell常用shell命令

    Linux Shell常用shell命令 一.文件.目录操作命令 1.ls命令 功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示 ...

  3. Ubuntu常用shell命令

    目录 ls cd mkdir mv cp scp rm df du chmod chown chgrp head tail screen apt-get Ubuntu常用shell命令 Ubuntu作 ...

  4. Windows常用shell命令大全(转)

    [Windows常用shell命令大全] 基于鼠标操作的后果就是OS界面外观发生改变, 就得多花学习成本.更主要的是基于界面引导Path与命令行直达速度是难以比拟的.另外Geek很大一部分是键盘控,而 ...

  5. 原 HBase 常用Shell命令

    HBase 常用Shell命令 1.进入hbase shell console $HBASE_HOME/bin/hbase shell 如果有kerberos认证,需要事先使用相应的keytab进行一 ...

  6. HBase 安装与配置及常用Shell命令

    HBase 安装与配置 首要配置 配置时间同步(所有节点上执行) yum -y install chrony vi /etc/chrony.conf #写入(7版本用server:8版本用pool): ...

  7. 常用shell命令中你所不熟悉的参数

    1.   ls: 类似于dos下的dir命令 ls最常用的参数有三个: -a -l -F. ls –a Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除 ...

  8. Android_ADB 常用 shell命令 和 sqlite3 简单增删改查

    今天学习了一个ADB的常用命令.接下来简单使用几个常用ADB shell 命令. 首先我们得明白什么是adb.exe ADB -Android Debug Bridge, 是 Android sdk ...

  9. Mac下的常用Shell命令

    今天介绍一下在Mac的终端中一些常用的Shell命令: 1.查看当前工作目录的完整路径 pwd (pwd的原意是:print work directiory,而不是密码password的意思,呵呵) ...

随机推荐

  1. 测试化工具XCTestCase

    layout: post title: "Xcode 7智能测试化工具XCTest学习" subtitle: "Xcode 7智能测试化工具XCTest学习" ...

  2. jquery.masonry瀑布流插件的4个使用步骤

    1.分别加载jquery插件与jquery.masonry插件两个文件 下载jquery插件:http://jquery.com也可以引用google的cdn外部jquery核心库JS文件下载jque ...

  3. Linux内核scatterlist API介绍

    1. 前言 我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1].Video.Audio等)中,经常看到scatterlist的影子.对我们这些“非英语母语”的人来说,初见这个词汇,脑袋瞬间 ...

  4. ArcMap导入数据到ArcSDE报000597或者000224的错误

    这两天碰到不同用户提出的不同的问题,可是分析之后发现导致该问题的解决办法是同一个原因. -------------------------------------------------------- ...

  5. windows live writer 2012 0x80070643

        折腾了两天,windows live writer 安装不成功,最后放弃了,发现一个叫做菊子曰的软件,但是免费版本的,发图片有限制,感觉非常不爽.windows live writer报错如下 ...

  6. tag标签数据库的设计

    方案一: 一个表,里面有个tags字段,存放以空格或逗号分隔的标签.缺点是长度受限,tag个数受限,查询like ‘%abc%’效率低 方案二: 同方案一,支持全文索引,或者用Lucence索引查询 ...

  7. Hadoop本地库介绍及相关问题解决方法汇总

    1.hadoop本地库的作用是什么?2.哪两个压缩编码器必须使用hadoop本地库才能运行?3.hadoop的使用方法?4.hadoop本地库与系统版本不一致会引起什么错误?5.$ export HA ...

  8. Linux下hosts、host.conf、resolv.conf的区别

    /etc/resolv.conf 该文件是DNS域名解析的配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数.resolv.conf的关键字主要有四个,分别是:nameserver   #定 ...

  9. Java总结篇系列:Java多线程(四)

    ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地 ...

  10. NGUI ScrollView出屏幕再回来坐标混乱解决

    主要是子节点没更新.乍一看调用UIPanel的Refresh()会管用,其实不然. 解决方法调用UIPanel的Invalidate让他所有子节点更新. panel.Invalidate(true);