常用shell命令实战
#!/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命令实战的更多相关文章
- Windows常用shell命令大全
Windows常用shell命令大全 基于鼠标操作的后果就是OS界面外观发生改变, 就得多花学习成本.更主要的是基于界面引导Path与命令行直达速度是难以比拟的.另外Geek很大一部分是键盘控,而非鼠 ...
- Linux Shell常用shell命令
Linux Shell常用shell命令 一.文件.目录操作命令 1.ls命令 功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示 ...
- Ubuntu常用shell命令
目录 ls cd mkdir mv cp scp rm df du chmod chown chgrp head tail screen apt-get Ubuntu常用shell命令 Ubuntu作 ...
- Windows常用shell命令大全(转)
[Windows常用shell命令大全] 基于鼠标操作的后果就是OS界面外观发生改变, 就得多花学习成本.更主要的是基于界面引导Path与命令行直达速度是难以比拟的.另外Geek很大一部分是键盘控,而 ...
- 原 HBase 常用Shell命令
HBase 常用Shell命令 1.进入hbase shell console $HBASE_HOME/bin/hbase shell 如果有kerberos认证,需要事先使用相应的keytab进行一 ...
- HBase 安装与配置及常用Shell命令
HBase 安装与配置 首要配置 配置时间同步(所有节点上执行) yum -y install chrony vi /etc/chrony.conf #写入(7版本用server:8版本用pool): ...
- 常用shell命令中你所不熟悉的参数
1. ls: 类似于dos下的dir命令 ls最常用的参数有三个: -a -l -F. ls –a Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除 ...
- Android_ADB 常用 shell命令 和 sqlite3 简单增删改查
今天学习了一个ADB的常用命令.接下来简单使用几个常用ADB shell 命令. 首先我们得明白什么是adb.exe ADB -Android Debug Bridge, 是 Android sdk ...
- Mac下的常用Shell命令
今天介绍一下在Mac的终端中一些常用的Shell命令: 1.查看当前工作目录的完整路径 pwd (pwd的原意是:print work directiory,而不是密码password的意思,呵呵) ...
随机推荐
- HDUOJ -----Color the ball
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDUOJ----2647Reward
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDUOJ----(1016)Prime Ring Problem
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- eclipse.ini的相关说明
http://www.cnblogs.com/yan5lang/archive/2011/05/24/2055867.htmlEclipse的启动由$ECLIPSE_HOME/eclipse.ini控 ...
- java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 1
String sql1 = "insert into TEST_RELEVANCEEXPORT" + " (ID, YYCSDM, YYCSMC, ...
- Linux命令-下载文件的工具:wget
Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...
- eclipse生成可执行jar包[转]
相信大家在开发java的时候一定会遇到要求将java工程打包成可运行的jar的需求,今天我在这篇博客中详细讲解一下生成可运行jar的两种方法,亲测完全可行. 1. 工程中不包含第三方的jar包 这种情 ...
- C#异常小知识
C#中异常捕获相信大家都很熟悉,经常使用的异常捕获有: 1. try{.....} catch (Exception ex) {throw ex;} 2. try{.....} catch (Exce ...
- java各种数据类型之间的转换
1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseIn ...
- JavaScript:零星知识
1. 关于document.write() 如果在文档已完成加载后执行 document.write,整个HTML 页面将被覆盖. 2. 对代码行进行折行 您可以在文本字符串中使用反斜杠对代码行进行换 ...