脚本修改tomcat端口

来源:互联网 发布:网络拓扑图功能描述 编辑:程序博客网 时间:2024/06/05 17:50

希望能有讨论或是改进意见,谢谢!

欢迎大家推荐实用脚本!


当一台机器部署多个tomcat时,需要修改tomcat的默认端口,每次去手动修改还确实有点麻烦

目的:修改tomcat的端口

由于判断端口号是否在使用使用了命令lsof,所以也要判断系统是否安装lsof

考虑问题:
1、不能和现有的端口冲突
2.安装lsof
异常情况:
1、没有带端口号执行
2、端口号不在系统的端口号范围
3、参数不是数字

思路,只要需要输入http的访问端口号,另外两个端口相对也不用去记,所以就相对于http的端口加10000
脚本放在server.xml的同级目录中

-----------------------------------------------------------------------------------------------
#!/bin/bash
#用途:修改tomcat端口号,限定http端口不大于45000
#脚本文件和修改的文件放在同一个目录
#在tomcat8 server.xml文件未做修改时测试可行
#20171106


script_file_dir=$(cd "$(dirname "$0")"; pwd)
http_port=$1
increment_num=10000
conf_file=server.xml
#<Server port="8005" shutdown="SHUTDOWN">
    # <Connector port="8080" protocol="HTTP/1.1"
# <Connector port="8009" protocol="AJP/1.3"


if [ "${http_port}" == "" ];then
echo "请输入tomcat的访问端口号"
exit
fi

check_err () {
if [ $? == 0 ]
then
echo "$(date +"%Y-%m-%d %H:%M:%S")执行正常"
else
echo "$(date +"%Y-%m-%d %H:%M:%S")执行有错误,脚本退出"
exit
fi
}

#检查是否安装lsof
echo "检测系统是否安装lsof"
lsof_app=`rpm -qa|grep lsof`
if [ -n "${lsof_app}" ];then
echo "系统已经安装lsof"
else
echo "系统未安装lsof,是否需要安装,如果安装,请输入y or yes or Y"
read input
case $input in
y|yes|Y)
yum install lsof -y
check_err
;;
*)
echo "由于没有安装lsof,不能执行后面的脚本,脚本退出"
exit;;
esac
fi
#里面输入端口后,还需要再判断一次是否为空。
while true
do
if [ "${http_port}" == "" ];then
echo "请输入tomcat的访问端口号"
#如果这里也使用read http_port的话,正好这里输入空值的话,会一直执行下去,所以这里不能接收输入,
exit
fi
# echo "判断${http_port}是否为数字"
expr ${http_port} "+" 10 &> /dev/null
if [ $? != 0 ];then
echo "端口号为数字,请输入数字"
read http_port
elif [ ${http_port} -le 0 ];then
echo "端口号为正数,请输入1-45000之前的数字"
read http_port
else
port_check=`lsof -i :${http_port}|grep -v "PID" | awk '{print $2}'`
if [ ${http_port} -gt 45000  -o  -n "${port_check}"  ]  ;then
echo "端口不能大于45000,并且查看输入的端口是否被占用"
netstat -lntp
echo "请重新输入未被使用并且端口小于45000的数字"
read http_port
else
break
fi
fi
done

##检查shutdown_port端口是否被占用
shutdown_port=$[http_port + increment_num]
while true
do
port_check=`lsof -i :${shutdown_port}|grep -v "PID" | awk '{print $2}'`


if [ -n "${port_check}" ];then
echo "${shutdown_port}端口被占用"
shutdown_port=$[shutdown_port +1]
else
break
fi
done

#检查ajp端口
ajp_port=$[shutdown_port + increment_num]
while true
do
port_check=`lsof -i :${ajp_port}|grep -v "PID" | awk '{print $2}'`


if [ -n "${port_check}" ];then
echo "${ajp_port}端口被占用,端口自增1"
ajp_port=$[ajp_port +1]
else
break
fi
done

#备份文件
echo "备份${conf_file}"
cp ${script_file_dir}/${conf_file} ${script_file_dir}/${conf_file}_$(date +%Y%m%d%H%M%S)

check_err

echo "修改http端口为${http_port}"
sed -i 's#<Connector port=".*" protocol="HTTP/1.1"#<Connector port="'${http_port}'" protocol="HTTP/1.1"#g' ${script_file_dir}/${conf_file}

echo "修改shutdown端口为${shutdown_port}"
sed -i 's#<Server port=".*" shutdown="SHUTDOWN">#<Server port="'${shutdown_port}'" shutdown="SHUTDOWN">#g' ${script_file_dir}/${conf_file}

echo "修改ajp端口为${ajp_port}"
sed -i 's#<Connector port=".*" protocol="AJP/1.3"#<Connector port="'${ajp_port}'" protocol="AJP/1.3"#g' ${script_file_dir}/${conf_file}
原创粉丝点击