shell脚本一键安装tomcat应用

# 使用本脚本的前置条件:
# 1. 切到root用户
# 2. web_install.sh脚本、web_config.properties配置文件、tomcat安装包、jdk安装包和webapp安装包在同一目录下

# 配置文件名称,其内容形式为:key=value
confDir="web_config.properties"
# 应用war包名称
appWarName="xxx-web.war"
# tomcat安装包名称
tomcatPackageName="apache-tomcat*"
# jdk安装包名称
jdkPackageName="*jdk*"
# 该脚本所在目录
baseDir=`pwd`
# tomcat用户名
uname="tomcatuser"
# tomcat用户软件安装位置
softwareDir="/home/"${uname}"/software"
# jdk安装位置(软链)
jdkDir=${softwareDir}"/java"
# tomcat安装位置(软链)
tomcatDir=${softwareDir}"/tomcat"
# web应用名称
webappName="xxx"
# web应用放置目录
webappDir=${tomcatDir}"/webapps/"${webappName}
# web应用的日志目录
webappLogsDir=${tomcatDir}"/webapps/webapplogs"
# 以下是待修改的配置文件名称
conf_prop=${webappDir}"/WEB-INF/classes/conf.properties"

function create_tomcatuser(){
	#1、创建tomcat用户
	echo "==== 创建${uname}用户开始 ===="
	#创建组
	gid=`id -g ${uname} &>/dev/null`
	if [ $? -eq 0 ] ; then
		echo "用户组:${uname}已存在"
	else
		echo "用户组:${uname}不存在,即将创建"
		groupadd -g 210 ${uname}
	fi	
	#创建用户
	uid=`id -u ${uname} &>/dev/null`
	if [ $? -eq 0 ] ; then
		echo "用户:${uname}已存在"
	else
		echo "用户:${uname}不存在,即将创建"
		useradd -u 210 -g 210 ${uname}
	fi
	# 创建tomcatuser的软件安装目录
	if [ -d ${softwareDir} ];then
		rm -rf ${softwareDir}
	fi
	mkdir -p ${softwareDir}
	chown -R ${uname}:${uname} ${softwareDir}
	echo "==== 创建${uname}用户结束 ===="
}

#校验及配置java环境变量
checkExistJava(){
	echo "检查java环境变量配置开始"
	#JAVA_HOME配置
	jdk_javahome=$(grep -n "export JAVA_HOME=.*" /home/${uname}/.bashrc | cut -f1 -d':')
	if [ -n "$jdk_javahome" ];then
		echo "JAVA_HOME已经配置,删除重新配置"
		# PATH配置中也会包含JAVA_HOME,一并删除
		sed -i '/JAVA_HOME/d' /home/${uname}/.bashrc
	fi
	sed -i '$a export JAVA_HOME='${jdkDir}  /home/${uname}/.bashrc
	sed -i '$a export PATH=$JAVA_HOME/bin:$PATH' /home/${uname}/.bashrc
	echo "检查java环境变量配置结束"
}

#安装jdk及环境配置
install_jdk()
{
	echo "==== 安装jdk开始 ===="
	if [ -d ${jdkDir} ];then
		echo "jdk软链已存在,尝试删除..."
		rm -rf ${jdkDir}
	fi
	# 判断jdk安装包是否存在
	num=`echo $(find ${baseDir} -maxdepth 1 -name ${jdkPackageName}) | wc -l | awk '{print $1}'`
	if [ ${num} -eq 1 ];then
		# 只查询当前目录下是否有jdk安装包,不递归查询
		jdkPackageDir=`echo $(find ${baseDir} -maxdepth 1 -name ${jdkPackageName})`
	else
		echo "jdk安装包不存在或有2个以上,请检查后再重试..."
		exit 3
	fi
	tar -zxf ${jdkPackageDir} -C ${softwareDir}
	# jdk解压后的目录
	jdkUnpackedDir=`ls -d ${softwareDir}/*jdk*`
	ln -snf ${jdkUnpackedDir} ${jdkDir}
	# jdk安装目录的权限赋给tomcat用户
	chown -R ${uname}:${uname} ${softwareDir}
	checkExistJava
	#配置生效并且验证java版本
	su - ${uname} -c 'source ~/.bashrc'
	echo "配置版本信息如下:"
	su - ${uname} -c 'java -version'
	if [ $? -eq 0 ]; then
		echo 'jdk配置完成'
	else
		echo '安装失败,请重新尝试或手动安装'
		exit 3
	fi
	echo "==== 安装jdk结束 ===="
}

install_project(){
	echo "==== 安装web应用开始 ===="
	num=`echo $(find ${baseDir} -maxdepth 1 -name ${appWarName}) | wc -l | awk '{print $1}'`
	if [ ${num} -eq 1 ];then
		if [ -d ${webappLogsDir} ];then
			echo "web应用的日志目录已存在,尝试删除..."
			rm -rf ${webappLogsDir}
		fi
		if [ -d ${webappDir} ];then
			echo "web应用所在目录已存在,尝试删除..."
			rm -rf ${webappDir}
		fi
		mkdir -p ${webappDir}
		mkdir -p ${webappLogsDir}
		# web应用安装包全路径名
		webappPackageDir=`echo $(find ${baseDir} -maxdepth 1 -name ${appWarName})`
		# 解压
		unzip ${webappPackageDir} -d ${webappDir} &> /dev/null
	else
		echo "web应用的安装包不存在,请检查后再重试..."
		exit 5
	fi
	echo "==== 修改配置文件开始 ===="
	lines=`wc -l ${confDir} | awk '{print $1'}`
	while(($lines>0))
	do
		line=`sed -n ${lines}"p" ${confDir}`
		lineLen=`echo ${line} | wc -L`
		# 处理非空行
		if [ ${lineLen} -gt 0 ];then
			# 处理非注释行
			if [ ${line:0:2} != "#" ];then
				# 配置项
				config=`echo ${line%%=*}`
				# 值
				# value=`echo ${line#*=}`
			fi
			# 整行替换其他配置
			# 第一种方式,替换某个关键字所在行(该关键字中有可能带特殊字符/)
			sed -i "s!^${config}=.*!${line}!" ${conf_prop}
			# 第二种方式,替换某个关键字所在行(该关键字中不带特殊字符/)
			# sed -i "/var dataCloud/c var dataCloud = '"${value}"';" ${xxx_properties}
			# 第三种方式,替换某个关键字所在行的下一行
			# line=`grep -n "case 'production'" ${xxx_properties} | awk '{print $1}'`
			# newline=${line%*:}
			# sed -i "$[newline+1]c authUrl = '"${value}"/authStatus';" ${xxx_properties}
			fi
		fi
		let "lines--"
	done
	echo "==== 修改配置文件结束 ===="
	# 从tomcat用户家目录下的software目录开始赋权
	chown -R ${uname}:${uname} ${softwareDir}
	echo "==== 安装web应用结束 ===="
}

install_tomcat(){
	# 安装tomcat
	echo "==== 安装tomcat开始 ===="
	if [ -d ${tomcatDir} ];then
		echo "tomcat软链已存在,尝试删除..."
		rm -rf ${tomcatDir}
	fi
	num2=`echo $(find ${baseDir} -maxdepth 1 -name ${tomcatPackageName}) | wc -l | awk '{print $1}'`
	if [ ${num2} -eq 1 ];then
		# tomcat安装包全路径名
		tomcatPackageDir=`echo $(find ${baseDir} -maxdepth 1 -name ${tomcatPackageName})`
		# 解压到${softwareDir}目录下
		tar -zxf ${tomcatPackageDir} -C ${softwareDir}
		# tomcat解压后的目录
		tomcatUnpackedDir=$(ls -d ${softwareDir}/*tomcat*)
		# 创建软链
		ln -snf ${tomcatUnpackedDir} ${tomcatDir}
		echo "==== 安装tomcat结束 ===="
	else
		echo "无法找到tomcat安装包或者tomcat安装包个数过多"
		exit 4
	fi
	
	# 给tomcat安装目录赋权
	chown -R ${uname}:${uname} ${softwareDir}
	chmod -R 775 ${tomcatDir}
}

function start_tomcat(){

	echo "开始杀死多余的tomcat进程..."
	suspects=`ps -ef | grep ${tomcatDir} | awk '{print $ 2}' | wc -l`
	# -gt表示>,此处>1,是因为grep ${tomcatDir}命令也会有一个pid  # grep -v 可以踢出自身那个pid
	if [ ${suspects} -gt 1 ];then
		num=${suspects}-1
		while(($num>0))
		do
			curPid=`ps -ef | grep ${tomcatDir} | awk '{print $ 2}' | head -n 1`
			echo "当前tomcat进程为${curPid},即将被杀死..."
			kill -9 ${curPid}
			let "num--"
		done
	fi
	#启动tomcat # 不需要
	echo "开始启动tomcat..."
	su - ${uname} -c  "cd ${tomcatDir}/bin && sh startup.sh"

}

# 创建tomcatuser用户
create_tomcatuser
# 安装jdk
install_jdk
# 安装tomcat
install_tomcat
# 部署代码包
install_project
# 启动tomcat
start_tomcat

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值