#!/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. 运行shell出错: 没有那个文件或目录

    http://blog.163.com/zhangjie_0303/blog/static/99082706201136114548840/

  2. C语言訪问MySQL数据库的方法

    1.加入头文件路径(MySQL安装路径中的include路径) 2.加入库文件(直接从MySQL安装路径中copy libmysql.lib就可以) 3.编程操作数据库 代码 // AccessToM ...

  3. C++ main函数命令行参数使用

    1. C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* argv ...

  4. Xilinx全局时钟

    前言 Xilinx系列.ISE环境中,设计复杂工程时全局时钟系统的设计显得尤为重要. 一.时钟网络与全局缓冲 在XilinxFPGA中,时钟网络分为两类:全局时钟网络和I/O区域时钟网络.以全铜工艺实 ...

  5. FPGA基础设计(四):IIC协议

    很多数字传感器.数字控制的芯片(DDS.串行ADC.串行DAC)都是通过IIC总线来和控制器通信的.不过IIC协议仍然是一种慢速的通信方式,标准IIC速率为100kbit/s,快速模式速率为400kb ...

  6. xilinx 官方技术资料

    http://china.xilinx.com/support/index.html/content/xilinx/zh/supportNav/ip_documentation.html

  7. [na]那些OVER的封装(pppoe/ppp/ipsec)

    什么over什么,如pppoe, ppp的封装都在over对象之后,入下图: PPPOE Ipsec

  8. Java高级面试题积累(二)

    简述23种设计 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口.而无需指定它们详细的类. 适配器模式(Adapter):将一个类的接口转换成客户希望的另外 ...

  9. MySql 触发器同步备份数据表记录

    添加记录到新记录表 DELIMITER $$ USE `DB_Test`$$ CREATE /*!50017 DEFINER = 'root'@'%' */ TRIGGER `InsertOPM_Al ...

  10. 利用ItextSharp 生成PDF文档改进版

    导入的ItextSharp.dll一定要是较高的版本 数据库表结构 生成的PDF样式 代码: namespace WebPDF { public partial class _Default : Sy ...