版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jadyer/article/details/46350935
完整版见
https://jadyer.github.io/2015/06/03/linux-shell-deploy/
#!/bin/sh
APP_NAME=engine
APP_WARS=JadyerEngine-web/target
APP_PATH=/app/tomcat-6.0.43
APP_CODE=sourcecode
SVN_URL=https://svn.sinaapp.com/jadyer/2/repository/JadyerEngine
[email protected]
SVN_PSWD=玄玉
appPID=0
getAppPID(){
pidInfo=`ps aux|grep java|grep $APP_PATH|grep -v grep`
if [ -n "$pidInfo" ]; then
appPID=`echo $pidInfo | awk '{print $2}'`
else
appPID=0
fi
}
downloadAndCompileSourceCode(){
cd $APP_PATH
mkdir $APP_CODE
svn --username $SVN_USER --password $SVN_PSWD checkout $SVN_URL $APP_CODE
cd $APP_CODE
mvn clean package -DskipTests
}
shutdown(){
getAppPID
echo "[玄玉] ========================================================================================================"
if [ $appPID -ne 0 ]; then
echo -n "[玄玉] Stopping $APP_PATH(PID=$appPID)..."
kill -9 $appPID
if [ $? -eq 0 ]; then
echo "[Success]"
echo "[玄玉] ========================================================================================================"
else
echo "[Failed]"
echo "[玄玉] ========================================================================================================"
fi
getAppPID
if [ $appPID -ne 0 ]; then
shutdown
fi
else
echo "[玄玉] $APP_PATH is not running"
echo "[玄玉] ========================================================================================================"
fi
}
deploy(){
cd $APP_PATH/webapps/
rm -rf $APP_NAME
rm -rf $APP_NAME.war
cp $APP_PATH/$APP_CODE/$APP_WARS/*.war $APP_NAME.war
cd $APP_PATH/logs/
rm -rf *
cd $APP_PATH
rm -rf $APP_CODE
}
startup(){
cd $APP_PATH/bin
./startup.sh
tail -100f ../logs/catalina.out
}
downloadAndCompileSourceCode
shutdown
deploy
startup
上面的脚本在执行的过程中,若Ctrl+C退出后,会导致应用部署失败,故编写了下面这个可在后台执行的脚本
不想用下面这个脚本也可以,只是在执行上面的脚本时直接[nohup ./deploy-engine.sh &]就行了
即便如此,个人仍推荐只用上面的脚本就够了(如果是你自己用的话)!!
#!/bin/sh
APP_LOGS=/app/tomcat-6.0.43/logs
SHELL_NAME=bin/deploy-engine.sh
shellPID=0
getShellPID(){
pidInfo=`ps aux|grep $SHELL_NAME|grep -v grep`
if [ -n "$pidInfo" ]; then
shellPID=`echo $pidInfo | awk '{print $2}'`
else
shellPID=0
fi
}
shutdown(){
getShellPID
echo "[玄玉] ========================================================================================================"
if [ $shellPID -ne 0 ]; then
echo -n "[玄玉] Stopping $SHELL_NAME(PID=$shellPID)..."
kill -9 $shellPID
if [ $? -eq 0 ]; then
echo "[Success]"
echo "[玄玉] ========================================================================================================"
else
echo "[Failed]"
echo "[玄玉] ========================================================================================================"
fi
getShellPID
if [ $shellPID -ne 0 ]; then
shutdown
fi
else
echo "[玄玉] $SHELL_NAME is not running"
echo "[玄玉] ========================================================================================================"
fi
}
#[2>&1]表示把标准错误(stderr)重定向到标准输出(stdout),否则会提示[nohup: redirecting stderr to stdout]
startupByNohup(){
cd $APP_LOGS
rm -rf nohup.log
nohup ../$SHELL_NAME > nohup.log 2>&1 &
sleep 1
tail -100f nohup.log
}
shutdown
startupByNohup