【Linux】项目shell启动脚本简单模本

背景:启动 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值