常用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的意思,呵呵) ...
随机推荐
- JavaScript中逗号运算符
JavaScript中逗号运算符(,)是顺序执行两个表达式.使用方法: expression1, expression2 其中expression1是任何表达式. expression2是任何表达式. ...
- Android开发学习之SQLite数据存取浅析
一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低 ...
- JMeter学习笔记--JMeter属性和变量
JMeter属性统一定义在jmeter.properties文件中.JMeter属性在测试脚本的任何地方都是可见的(全局),通常被用来定义一些JMeter使用的默认值.如属性remote_hosts定 ...
- 普里姆Prim算法介绍
普里姆(Prim)算法,和克鲁斯卡尔算法一样,是用来求加权连通图的最小生成树的算法. 基本思想 对于图G而言,V是所有顶点的集合:现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T ...
- uva 116 - Unidirectional TSP (动态规划)
第一次做动规题目,下面均为个人理解以及个人方法,状态转移方程以及状态的定义也是依据个人理解.请过路大神不吝赐教. 状态:每一列的每个数[ i ][ j ]都是一个状态: 然后定义状态[ i ][ j ...
- Jpa 语法和 demo
转 http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html 参考资料 https://www.w3cschool.cn/java/jpa-qu ...
- 多进程对 MySQL update的影响
今天要做数据清洗的时候,要更新一个数据库字段,考虑到用多进程去更新数据库,也许程序会跑得快一些,结果开了64个进程, 结果是其他程序更新的时候,速度非常慢,最后发现的原因是,数据库中有64个SQL语句 ...
- java web中请求和响应中包含中文出现乱码解析
说明:在计算机中保存的一切文本信息是以一定的编码表(0,1,0,1)来保存我们所认识的字符(汉字或英文字符),由字符到计算机存储的二进制过程是编码,由读取二进制到文本的过程称为解码.而字符编码有多种不 ...
- Xilinx全局时钟
前言 Xilinx系列.ISE环境中,设计复杂工程时全局时钟系统的设计显得尤为重要. 一.时钟网络与全局缓冲 在XilinxFPGA中,时钟网络分为两类:全局时钟网络和I/O区域时钟网络.以全铜工艺实 ...
- Matlab实现图像切割
以下使用极小值点阈值选取方法,编写MATLAB程序实现图像切割的功能. 极小值点阈值选取法即从原图像的直方图的包络线中选取出极小值点, 并以极小值点为阈值将图像转为二值图像 clear all; cl ...