一键安装配置tomcat脚本的多层考虑

  对于这个一键脚本,我最初的想法是比较简单的,就是将所有安装的命令都一行行的写好,然后使用固定的命令,一键执行就等于成功了,第一版的内容如下:

#!/bin/bash
user=$1
dr=$2
#关闭防火墙
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
sudo systemctl disable firewalld.service
#修改内核参数
sudo cp /etc/security/limits.conf  /etc/security/limits.conf_bak
sudo echo "*  soft    nproc    65535" >> /etc/security/limits.conf
sudo echo "*  hard    nproc    65535" >> /etc/security/limits.conf
sudo echo "*  soft    nofile   65536" >> /etc/security/limits.conf
sudo echo "*  hard    nofile   65536" >> /etc/security/limits.conf 
#创建运行用户和目录
sudo groupadd $user;useradd -g $user $user
sudo echo "tom!23cat" | passwd $user --stdin
sudo chown -R $user:$user /$dr/*
sudo chmod 755 -R /$dr/*
sudo mkdir -p /$dr/software/
sudo chmod 777 /$dr/software/
#修改防火墙参数
cp /etc/selinux/config /etc/selinux/config_bak
se1=`grep ^SELINUX= /etc/selinux/config  | grep -v "#"|awk -F'=' '{print $NF}'`
sed -i -e "s/$se1/disabled/g" /etc/selinux/config
grep ^SELINUX= /etc/selinux/config  | grep -v "#"

  然而,当我给上司看了的时候,瞬间惊呆了,因为太烂了,运维5年写出如此幼稚的安装脚本,有如下的问题需要判断:

1、若是运行用户或者安装目录已存在,有做判断?不存在,又有做判断?

2、怎么确定你limits配置没有错误?

3、若是给了多个参数,脚本又如何判断是否执行?

4、若是执行创建的用户名称或者目录,包含特殊字符,执行是否停止,有做判断?如何限制只允许用户使用数字或者字母创建?

5、怎么判断tomcat安装成功?

6、是否有安装完成后,就能让人知道那些账号密码还有访问路径等信息?

7、/这个符号的问题,如何保证目录名称无论是是/a/b 或者ab/sb/等,都可以正常创建?

8、若是脚本跟安装文件,不在同一个目录下,是否做了执行判断?如安装脚本是调用当前目录下的,tomcat目录文件,若是当前目录没有,又会怎么样?

  涵盖了上述的问题,一直修改了很多次,最终完成了下面这个可用的版本,跟最初的版本差距甚大,脚本里面涵盖的命令不难,只是没有深思,之前完全没有考虑那么多,导致出版写那么糟糕

  同时主要原因是之前考虑的层面太浅显了,没有多层次的,深入去思考,各个方面的可能引发安装失败的问题,希望以此为鉴。

  1 #!/bin/bash
  2 ###安装目录文件检测,确认安装文件跟脚本是在同一个目录下##
  3 for i in {tomcat,jdk1.8.0_251}
  4 do
  5 Path=`pwd`/$i
  6     if [[ -d "$Path" ]]
  7     then
  8         echo  $i
  9     else
 10         eche “$i,不存在,请确认执行脚本所在的目录是否存在安装文件”
 11         exit 1;
 12     fi
 13 done
 14 ###安装前判断命名,只能输入两个参数,多或者少都会退出#####
 15 [ $# -ne 2 ] && { 
 16 echo “缺少参数,不要使用特殊字符命名,请使用这个格式执行安装命令: sh install.sh 运行用户名 运行目录名,且只允许使用字母或者数字命名用户或者目录,如sh install.sh ap123ps /abc/abs/ 或 sh install.sh apps /abc/ 或 sh install.sh ags /ab/c/等“;
 17 exit 1;
 18 }
 19 ###这行是为了去掉/这个符号,方便去确认目录名称,是否包含特殊符号
 20 dr_tmp=`echo $2| sed -e 's/\///g'`
 21 for i in {$1,$dr_tmp}
 22 do
 23 ####$i这个字符串里面是否只有一个或者多个的数字、大或小写的字母,如果有那么命名正确#####
 24 if [[ $i =~ ^[a-z\|A-Z\|0-9]+$ ]]
 25 then
 26     echo  $i 命名正确
 27 else
 28     echo  $i 命名有误,请用字母或数字,重新执行安装
 29     exit 1;
 30 fi
 31 done
 32 user=$1
 33 #####这行就是为了清楚 目录名称首尾的/,避免下面的代码里面出现//a//这样的情况出现####
 34 dr=`echo $2 | sed -e "s/^\///g" |sed -e "s/\/$//g"`
 35 echo "开始安装,预计两分钟内完成"
 36 echo "安装用户 $user "
 37 
 38 ##函数设置,判断用户是否存在,使用mkdir -p 不管目录是否存在都可以执行成功,所不需要加判断##
 39 user_create_check(){
 40     b=`cat /etc/passwd | awk -F':' '{print $1}' | grep ^$user$`
 41         if [[ $user == $b ]]
 42         then echo “用户已经存在”
 43             sudo mkdir -p /$dr/
 44             sudo mv jdk1.8.0_251 tomcat /$dr/
 45             sudo chown -R $user:$user /$dr/*
 46             sudo chmod 755 -R /$dr/*
 47             sudo mkdir -p /$dr/software/
 48             sudo chmod 777 /$dr/software/
 49             echo “运行tomcat用的户和目录准备完成”
 50     else
 51             sudo groupadd $user;useradd -g $user $user
 52             sudo echo "tom#123cat" | passwd $user --stdin
 53             sudo mkdir -p /$dr/
 54             sudo mv jdk1.8.0_251 tomcat /$dr/
 55             sudo chown -R $user:$user /$dr/*
 56             sudo chmod 755 -R /$dr/*
 57             sudo mkdir -p /$dr/software/
 58             sudo chmod 777 /$dr/software/
 59             echo “运行tomcat用的户和目录准备完成”
 60     fi
 61 }
 62 
 63 limit_wirte_check(){
 64     limit=`tail -4 /etc/security/limits.conf | grep ^\*| awk -F" " '{print $NF}' | awk '{sum += $1};END {print sum}'`
 65     limi_sum=262142
 66         if [[ $limit -eq $limi_sum ]]
 67         then echo “内核参数配置完成”
 68     else
 69         echo “内核参数配置未完成,请手动向/etc/security/limits.conf 添加:*  soft    nproc    65535 ,*  hard    nproc    65535 ,*  soft    nofile   65536 ,*  hard    nofile   65536,这四行配置”
 70     fi
 71 }
 72 #创建用户和修改tomcat目录权限
 73 user_create_check
 74 #关闭防火墙
 75 sudo systemctl stop firewalld.service
 76 sudo systemctl disable firewalld.service
 77 sudo systemctl disable firewalld.service
 78 #修改内核参数
 79 sudo cp /etc/security/limits.conf  /etc/security/limits.conf_bak
 80 sudo echo "*  soft    nproc    65535" >> /etc/security/limits.conf
 81 sudo echo "*  hard    nproc    65535" >> /etc/security/limits.conf
 82 sudo echo "*  soft    nofile    65536" >> /etc/security/limits.conf
 83 sudo echo "*  hard    nofile    65536" >> /etc/security/limits.conf
 84 limit_wirte_check
 85 #修改防火墙参数
 86 cp /etc/selinux/config /etc/selinux/config_bak
 87 se1=`grep ^SELINUX= /etc/selinux/config  | grep -v "#"|awk -F'=' '{print $NF}'`
 88 sudo sed -i -e "s/$se1/disabled/g" /etc/selinux/config
 89 sudo grep ^SELINUX= /etc/selinux/config  | grep -v "#"
 90 #修改环境参数
 91 sudo cp /etc/profile /etc/profile_bak
 92 sudo echo "export JAVA_HOME=/$dr/jdk1.8.0_251" >> /etc/profile
 93 sudo echo "export JAVA_BASE=/$dr/jdk1.8.0_251" >> /etc/profile
 94 sudo echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile
 95 
 96 #创建运行用户,配置运行环境参数
 97 sudo cp /home/$user/.bash_profile /home/$user/.bash_profile_bak
 98 sudo echo "export  CATALINA_HOME=/$dr/tomcat" >> /home/$user/.bash_profile
 99 sudo echo "export  CATALINA_BASE=/$dr/tomcat" >> /home/$user/.bash_profile
100 ###这里$里面多一个\是为了转义,让它以字符串的形式重定向到文件里面,这样写入的和看到的内容才会一致###
101 sudo echo "export  PATH=\$PATH:\$CATALINA_HOME/bin" >> /home/$user/.bash_profile
102 sudo chmod 755 /home/$user/.bash_profile
103 sudo chown $user.$user -R /home/$user/
104 echo $user  passwd:"tom!23cat"
105 su - $user  -c "source ~/.bash_profile"
106 su - $user  -c "startup.sh"
107 sleep 10s
108 su -  $user  -c "curl localhost:8880"
109 echo -e 
110 echo “web访问测试路径 http://服务器公网访问地址:8080,本地访问localhost:8880“
111 echo “tomcat运行用户$user ,如果它是新建的用户,那么$user访问密码tom#123cat”
112 echo “tomcat安装目录 /$dr/”

 

posted @ 2021-01-14 00:10  知识,让我掌握未来  阅读(128)  评论(0编辑  收藏  举报