linux-tutorial/codes/build/java-app-boot.sh

101 lines
2.6 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
#################################################################################
# JAVA 应用通用启动脚本
# Author: Zhang Peng
#################################################################################
# 检查脚本参数,如必要参数未传入,退出脚本。
function checkInput() {
if [ "${app}" == "" ] || [ "${oper}" == "" ] || [ "${javaArgs}" == "" ] || [ "${classpathArgs}" == "" ] || [ "${bootstrapClass}" == "" ]; then
echo "请输入脚本参数app oper javaArgs classpathArgs bootstrapClass"
echo " app: 应用名。"
echo " oper: 运行环境必填。可选值start|stop|restart"
echo " javaArgs: JVM 参数(必填)。"
echo " classpathArgs: classpath参数必填。"
echo " bootstrapClass: 启动类(必填)。"
exit 0
fi
}
# 检查文件夹是否存在,不存在则创建
function createFolderIfNotExist() {
if [ ! -d "$1" ];then
mkdir -p "$1"
fi
}
# 检查服务是否已经启动
pids=""
function checkStarted() {
pids=`ps -ef | grep java | grep ${app} | awk '{print $2}'`
if [ -n "${pids}" ]; then
return 0
else
return 1
fi
}
function main() {
case "${oper}" in
start )
echo -n "starting server: "
# 检查服务是否已经启动
if checkStarted ;then
echo "ERROR: server already started!"
echo "PID: ${pids}"
exit 1
fi
args="${javaArgs} -classpath ${classpathArgs} ${bootstrapClass}"
echo -e "statup params:\n ${args}"
#启动服务
touch ${LOG_DIR}/${app}-startup.log
nohup java ${args} > ${LOG_DIR}/${app}-startup.log 2>&1 &
# echo -e "执行参数:\n${args}"
echo -e "\nthe server is started..."
;;
stop )
echo -n "stopping server: "
#dubbo提供优雅停机, 不能使用kill -9
if checkStarted ;then
kill ${pids}
echo -e "\nthe server is stopped..."
else
echo -e "\nno server to be stopped..."
fi
;;
restart )
$0 ${app} stop "${javaArgs}" "${classpathArgs}" "${bootstrapClass}"
sleep 5
$0 ${app} start "${javaArgs}" "${classpathArgs}" "${bootstrapClass}"
;;
* )
echo "Invalid oper: ${oper}."
exit 1
esac
exit 0
}
######################################## MAIN ########################################
# 设置环境变量
export LANG="zh_CN.UTF-8"
# 获取输入参数
app=`echo $1`
oper=`echo $2`
javaArgs=`echo $3`
classpathArgs=`echo $4`
bootstrapClass=`echo $5`
vars=$*
checkInput
# 设置全局常量
LOG_DIR=/home/zp/log
createFolderIfNotExist ${LOG_DIR}
# 执行 main 方法
main