101 lines
2.6 KiB
Bash
101 lines
2.6 KiB
Bash
#!/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
|