您现在的位置是:首页 > 正文

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

2024-04-01 05:13:57阅读 1

背景:启动 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

网站文章

  • Pytorch中的转置卷积

    反卷积反卷积(Transposed Convolution)输出大小计算起点可以整除不可以整除综合起来参考文献 反卷积(Transposed Convolution) 又称为转置卷积。 torch.n...

    2024-04-01 05:13:17
  • 安装think PHP5

    安装think PHP5

    Composer安装 Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。 下载地址:https://getcomposer.org/Com...

    2024-04-01 05:13:10
  • java:CAS、ABA问题详解

    1、java中的原子性操作所谓原子性操作,是指执行一系列操作时,这些操作要么全部执行,要么全部不执行,不存在只执行其中一部分的情况。2、CAS方法CAS即Compare and Swap,其是JDK提...

    2024-04-01 05:13:02
  • 系统错误:&H8007007E(-2147024770)。 找不到指定的模块。解决

    系统错误:&H8007007E(-2147024770)。 找不到指定的模块。 就很发呆,以前就正常。 然后发现多个ocx,那肯定是这个组件没有注册了。运行了vb库失败后,便从程序里复制了MSINET.OCX,放到了c:/windows/systems32 下面 然后在开始运行里输入:regsvr32 MSINET.OCX,进行注册 提示注册成功后,完成 程序...

    2024-04-01 05:12:20
  • layui踩坑记录之form表单下的button按钮默认自动提交

    layui踩坑记录之form表单下的button按钮默认自动提交

    因此,当我们在使用form的时候,如果没有添加标准的提交按钮,会自动默认把其他的普通按钮认为是提交按钮,因为button的type默认值为“submit”。其实就是使用form的时候,应该对应有一个提...

    2024-04-01 05:12:12
  • 加快局域网访问时间的方法策略

    法一:将网卡调至全速按下Win+Pause/Break键,单击“硬件”标签,再单击“设备管理器”从而打开“设备管理器”,双击“网络适合器”下相应网卡,在打开窗口中单击“高级”标签,选中Link Spe...

    2024-04-01 05:12:06
  • 微信小程序-处理多个文件上传

    一、方法的封装/** * 采用递归的方式上传多个文件 * filePaths 要上传的资源 * results 上传成功返回的数据 * successUp 成功个数 * failUp 失败个数 * index 上传文件的下标 */function uploadOneByOne(filePaths = [], results = [] , successUp =...

    2024-04-01 05:11:59
  • SQL过滤与应用过滤如何选择

    SQL过滤与应用过滤进行复杂查询的时候,数据可以通过SQL过滤,也可以在应用层进行过滤。应当优先采用哪一种过滤方式呢?通常来说,优化数据库后可以更快速有效的对数据进行过滤。使用客户端进行过滤的方法通常是:sql的select语句为客户端应用检索出超过实际所需的数据,然后客户端代码对返回数据进行循环提取出需要的行。使用客户端应用进行过滤时,有三个不好的影响:1.会极大的影响应用的性能2....

    2024-04-01 05:11:19
  • 系统管理员设置了系统策略禁止此安装怎么办

    系统管理员设置了系统策略禁止此安装怎么办

    解决措施

    2024-04-01 05:11:11
  • vue项目开发全局组件笔记

    在开发vue项目时,经常会用到element UI组件,在全局使用像message,toast,alert等组件得时候会很方便,但是在开发需要UI制定的项目时,就不能使用element UI了,这时就需要自己去开发属于自己的组件库了。具体的开发方法官网提供了。下面我们就根据官网提供的方法来开发属于我们自己的alert警告组件首先我们要在src/components文件夹下创建一个alert文...

    2024-04-01 05:11:04