背景:启动 tomcat 和 jar工程,该脚本是先后启动 tomcat 和 jar 的,如果你需要启动其中的一个,自己进行删除另一个相关代码即可
备注:如果你需要启动的是 tomcat
或 jar工程
,那么您只需要修改 【tomcat服务信息】和 【jar项目信息】后即可使用
#!/bin/bash
# tomcat服务信息
tomcat_port=8080
tomcat_name=apache-tomcat-8.5.82
tomcat_shutdown=/usr/local/mkdockerimg/tomcat-jdk-jar/apache-tomcat-8.5.82/bin/shutdown.sh
tomcat_startup=/usr/local/mkdockerimg/tomcat-jdk-jar/apache-tomcat-8.5.82/bin/startup.sh
# jar项目信息
jar_port=8081
jar_home=/usr/local/mkdockerimg/tomcat-jdk-jar/apache-tomcat-8.5.82/webapps/brinkidea-boot-0.0.1-SNAPSHOT.jar
jar_name=brinkidea-boot-0.0.1-SNAPSHOT.jar
jar_xms="-Xms64m" # 起始运存
jar_xmx="-Xmx128m" # 最大运存
jar_logname="log.file" # 日志文件名,默认与 jar_home 同级
# 运行脚本提示信息
tips(){
echo "-------------------------------------------------------"
echo ""
echo "==> 项目端口: ${jar_port}"
echo "==> 项目地址: ${jar_name}"
echo ""
echo "==> 项目脚本执行候选参数:"
echo "==> status 查看当前项目运行状态"
echo "==> start 启动当前项目"
echo "==> stop 停止当前项目"
echo "==> restart 重启当前项目"
echo ""
echo "--------------------------------------------------------"
}
# 查看状态
status(){
#【netstat -tunpl】:查询进程状态
#【grep $jar_port】:根据端口号port过滤行
#【awk '{print $7}'】:扫描第七列
#【cut -d/ -f 1】:根据 "/"对行进行拆分,并且取查分后的第一部分
tomcat_pid=`netstat -tunpl |grep ${tomcat_port} |awk '{print $7}' |cut -d/ -f 1`
jar_pid=`netstat -tunpl |grep ${jar_port} |awk '{print $7}' |cut -d/ -f 1`
#【[ -z "${tomcat_pid}"]】判断jar_pid的长度是否为0,即判断端口是否被占用
if [ -z "${tomcat_pid}" ];then
echo "==> ${tomcat_name}未运行"
else
echo "==> ${tomcat_name}运行中,PID:${tomcat_pid}"
fi
if [ -z "${jar_pid}" ];then
echo "==> ${jar_name}未运行"
else
echo "==> ${jar_name}运行中,PID:${jar_pid}"
fi
}
# 启动项目
start(){
tomcat_pid=`netstat -tunpl |grep ${tomcat_port} |awk '{print $7}' |cut -d/ -f 1`
if [ -z "${tomcat_pid}" ];then
echo "==> ${jar_name}开始启动"
# 启动tomcat
$tomcat_startup
sleep 1
tomcat_pid=`netstat -tunpl |grep ${tomcat_port} |awk '{print $7}' |cut -d/ -f 1`
#【[ -n "${tomcat_pid}"]】判断tomcat_pid的长度是否不为0,即判断端口是启用
if [ -n "${tomcat_pid}" ];then
echo "==> ${tomcat_name}已启动,PID:${tomcat_pid}"
else
echo "==> ${tomcat_name}启动失败"
fi
else
echo "==> ${tomcat_name}正在运行中或端口已被占用,PID:${tomcat_pid}"
fi
sleep 1
echo ""
jar_pid=`netstat -tunpl |grep "${jar_port}" |awk '{print $7}' |cut -d/ -f 1`
if [ -z "${jar_pid}" ];then
echo "==> ${jar_name}开始启动"
#【> log.file 2>&1】:以覆盖的方式,把正确输出和错误信息同时保存到同一个文件(log.file)中
nohup java -jar ${jar_xms} ${jar_xmx} ${jar_home} > ${jar_logname} 2>&1 &
counts=0
while :
do
# 10分钟后若项目依然没有启动,则认为启动超时
if [ $counts == 200 ];then
echo "==> ${jar_name}启动超时"
break
fi
jar_pid=`netstat -tunpl |grep "${jar_port}" |awk '{print $7}' |cut -d/ -f 1`
if [ -n "${jar_pid}" ];then
echo "==> ${jar_name}已启动,PID:${jar_pid}"
break
else
echo "==> ${jar_name}正在启动中,请耐心等待..."
sleep 3
# counts 加1
counts=`expr $counts + 1`
fi
done
else
echo "==> ${jar_name}正在运行中或端口已被占用,PID:${jar_pid}"
fi
}
# 停止项目
stop(){
jar_pid=`netstat -tunpl |grep ${jar_port} |awk '{print $7}' |cut -d/ -f 1`
if [ -z "${jar_pid}" ];then
echo "==> ${jar_name}未启动,请先启动"
else
#【kill -9 $jar_pid】:杀死进程号为jar_pid的进程
kill -9 $jar_pid
sleep 1
jar_pid=`netstat -tunpl |grep ${jar_port} |awk '{print $7}' |cut -d/ -f 1`
if [ -z "${jar_pid}" ];then
echo "==> ${jar_name}已停止"
else
echo "==> ${jar_name}停止失败,PID=${jar_pid}"
fi
fi
sleep 1
tomcat_pid=`netstat -tunpl |grep ${tomcat_port} |awk '{print $7}' |cut -d/ -f 1`
if [ -z "${tomcat_pid}" ];then
echo "==> ${tomcat_name}未启动,请先启动"
else
$tomcat_shutdown
sleep 1
tomcat_pid=`netstat -tunpl |grep ${tomcat_port} |awk '{print $7}' |cut -d/ -f 1`
if [ -z "${tomcat_pid}" ];then
echo "==> ${tomcat_name}已停止"
else
echo "==> ${tomcat_name}停止失败,PID=${tomcat_pid}"
fi
fi
}
# 重启项目
restart(){
stop
sleep 2
start
}
# 参数选项
case "$1" in
"status")
status
;;
"start")
start
;;
"stop")
stop
;;
"restart")
restart
;;
*)
tips
;;
esac