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

101 lines
2.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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