#!/bin/bash
JAVA_HOME=/usr
JAVA=$JAVA_HOME/bin/java
projcet_root="/data/projects"
#logfile="nohup.out"
target_url="http://172.20.20.28/target"
extention=".jar"
config_path="/data/env"
backups="/data/backups"
function green_echo(){
echo -e "\033[32m $1 \033[0m"
}
function red_echo(){
echo -e "\033[31m $1 \033[0m"
}
function _checklog() {
project_name=$1
logfile=$2
log_name="${projcet_root}/${project_name}/${logfile}"
flag=0
while true;do
line_number=`grep -n "Started.*seconds (JVM running for.*)$" ${log_name} | awk -F: '{print $1}'`
if [ ! -z $line_number ];then
#echo $line_number
sed -n "1,${line_number}p" $log_name | grep "ERROR" > /dev/null 2>&1
if [ $? -eq 0 ];then
red_echo "-->DeploymentOutput: Error occured during Application Startup!"
exit 1
else
green_echo "-->DeploymentOutput: Application Startup with no ERRORs!"
exit 0
fi
break
fi
flag=`expr $flag + 1`
sleep 10
if [ $flag -gt 10 ];then
red_echo "-->DeploymentOutput: Application do not start in 100 seconds."
exit 2
fi
done
}
function _restart()
{
project_name=$1
logfile=$2
base_dir="${projcet_root}/${project_name}"
pid=`ps aux | grep -v grep | grep ${project_name}${extention} | awk '{print $2}'`
kill -9 $pid
nohup $JAVA -Xms512m -Xmx512m -XX:NewSize=400m -XX:+UseConcMarkSweepGC -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+HeapDumpOnOutOfMemoryError -Dglobal.config.path=${config_path} -Ddubbo.application.qos.enable=false -jar ${base_dir}/${project_name}${extention} >> ${base_dir}/${logfile} 2>&1 &
green_echo "Restart project $project_name..."
sleep 5
exit 0
}
function _taillog(){
project_name=$1
logfile=$2
tail -100f $project_name/$logfile
exit 0
}
function _backuplog(){
base_dir=$1
logfile=$2
if [ -f $base_dir/${logfile} ];then
rm -f $base_dir/${logfile}.3 >/dev/null 2>&1
mv $base_dir/${logfile}.2 $base_dir/${logfile}.3 >/dev/null 2>&1
mv $base_dir/${logfile}.1 $base_dir/${logfile}.2 >/dev/null 2>&1
mv $base_dir/${logfile} $base_dir/${logfile}.1 >/dev/null 2>&1
fi
}
function _deploy(){
project_name=$1
logfile=$2
base_dir="${projcet_root}/${project_name}"
if [ ! -d $base_dir ];then
red_echo "Project $project_name not configured!"
exit 2
fi
pid=`ps aux | grep -v grep | grep ${project_name}${extention} | awk '{print $2}'`
kill -9 $pid
green_echo "Stop project $project_name..."
#make backups,just keep the last one jar
if [ -f $base_dir/${project_name}${extention} ];then
mv $base_dir/${project_name}${extention} $backups
fi
_backuplog ${base_dir} ${logfile}
#get project jar
wget -nv -P $base_dir/ $target_url/${project_name}${extention}
green_echo "Starting project $project_name..."
nohup $JAVA -Xms512m -Xmx512m -XX:NewSize=400m -XX:+UseConcMarkSweepGC -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+HeapDumpOnOutOfMemoryError -Dglobal.config.path=${config_path} -Ddubbo.application.qos.enable=false -jar ${base_dir}/${project_name}${extention} > ${base_dir}/${logfile} 2>&1 &
}
#
if [ $# -gt 2 ];then
echo "Usage: ./$0 PROJECT_NAME "
echo "Usage: ./$0 restart PROJECT_NAME"
exit 1
fi
#
args=$1
#
if [ $args == "restart" -a $# -eq 2 ];then
project_name=$2
logfile="${project_name}.log"
_restart $project_name $logfile
elif [ $args == "tail" -a $# -eq 2 ];then
project_name=$2
logfile="${project_name}.log"
_taillog $project_name $logfile
else
project_name=$1
logfile="${project_name}.log"
_deploy $project_name $logfile
green_echo "Checking Application Status..."
_checklog $project_name $logfile
fi