运维统一脚本门户(持续更新中)

脚本后续更新说明

#因假期无聊、再次脚本的基础上进行重构,便于后续的添加、修改等
#且重构的文件数量较多、统一提交给gitee.com

gitee地址:

https://gitee.com/yuanhuanliang/run

未设置公用,如有需要请私信联系
后续新增的功能详见如下链接
https://blog.csdn.net/qq_44246980/article/details/124528778
本文末尾附2千行的脚本,且有些功能尚不支持,可自行复制下载查看

项目背景

最近在微信公众号中看到一篇很有参考意义的脚本脚本大集合,但是却没有对外公布相应的源码

所以空余时间无聊,根据那个那脚本信息,准备把我之前写的相关脚本给串联启动,时间非运维类可以执行,显得非常人性化。

首先,简单介绍一下脚本
执行方式很简单

sh Run.sh
# 或者
bash Run.sh
# 或者
chmod +x Run.sh
./Run.sh
#任选一种都可以完美地执行

执行结果如下

在这里插入图片描述

主菜单的模块较多,实际上只有选项一选项二完成了,三的话涉及一系列脚本,当前尚未完善,且不准备开放,不做过多的描述,选项四是日常学习过程中用到的小脚本,后续会陆续补充

脚本目录结构

选项一 系统资源查看
CPU信息查看

在这里插入图片描述
先选择CPU,填入数字“1”
在这里插入图片描述

磁盘信息查看

在这里插入图片描述

内存信息查看

在这里插入图片描述

网卡信息查看

在这里插入图片描述

服务器信息查看

在这里插入图片描述

选择"6"的话,会把CPU、磁盘、内存、服务器、网卡的信息都打印在屏幕上

选项二 网卡实时流量
网卡实时流量

在这里插入图片描述

选项三 常见服务部署

在这里插入图片描述

监控服务(prometheus、zabbix)及其组件

在这里插入图片描述

选项四 自定义脚本

在这里插入图片描述

RPM安装包下载

执行结果如下
在这里插入图片描述

选项五 Yum仓库配置

yum仓库的添加(在线)

在这里插入图片描述

选项六 基础环境配置

基础环境配置

在这里插入图片描述

以选项6为例,检查服务状态

在这里插入图片描述

备注:
如果想要安装harbor服务,则执行脚本输入:3 > 4> 1
https的方式方式尚未完善,需要手动修改证书,且生产证书的脚本,则执行脚本输入:4==>2
然后手动修改一下:harbor.yml文件,重新加载服务即可

选项七 中间件服务

在这里插入图片描述

选项八 docker镜像构建

在这里插入图片描述
在这里插入图片描述

目录添加了kafka的镜像构建方式,当时对应的jdk、kafka的安装包都需要手动下载并上传到指定的目录下

下面分享一下脚本

#!/bin/bash
#所有者:北城半夏
#当前版本
#v1.0.1
#################################################################################
#                                                                               #
#                                   定义变量                                    #
#                                                                               #
#################################################################################
centosVersion=$(awk '{print $(NF-1)}' /etc/redhat-release)
bashpath="$(cd `dirname $0`;pwd)"
#检查当前系统安装包是否已安装如下的rpm包
rpm_name="wget net-tools vim sysstat bash-completion net-tools"
#################################################################################
#                                                                               #
#                                   日志输出                                    #
#                                                                               #
#################################################################################
#
info(){
  echo -e "\033[35m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`\033[0m" "\033[36m$1\033[0m "
}
info1(){
  echo -e "\033[36m $1 \033[0m "
}
info2(){
  echo -e "\033[34m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`\033[0m" "\033[35m$1\033[0m "
}
info3(){
 info1 "------------------------------------------------------------------------------" 
}
info4(){
  echo -e "\033[32m $1 \033[0m "
}
info5(){
 info1 "==============================================================================" 
}
info6(){
  echo -e "\033[33m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`\033[0m" "\033[91m$1\033[0m "
}
info7(){
  echo -e "\033[35m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`\033[0m" "\033[32m$1\033[0m "
}

info8(){
  echo -e "\033[31m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`\033[0m" "\033[35m$1\033[0m "
}
info9(){
  echo -e "\033[32m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`\033[0m" "\033[36m$1\033[0m "
}

#################################################################################
#                                                                               #
#                             服务器相关信息查看                                #
#                                                                               #
#################################################################################
#查看CPU相关信息
getCpuStatus(){
   echo ""
   info5
   Physical_CPUs=$(grep "physical id" /proc/cpuinfo| sort | uniq | wc -l)
   Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l)
   CPU_Kernels=$(grep "cores" /proc/cpuinfo|uniq| awk -F ': ' '{print $2}')
   CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq)
   CPU_Arch=$(uname -m)
   load_1=$(uptime |awk -F ":" '{print $NF}'|awk -F "," '{print $1}')
   load_5=$(uptime |awk -F ":" '{print $NF}'|awk -F "," '{print $2}')
   load_15=$(uptime |awk -F ":" '{print $NF}'|awk -F "," '{print $3}')

   #####################################
   info4 "CPU的基本信息"
   info2 "  物理CPU个数:$Physical_CPUs"
   info2 "  逻辑CPU个数:$Virt_CPUs"
   info2 "  每CPU核心数:$CPU_Kernels"
   info2 "      CPU型号:$CPU_Type"
   info2 "      CPU架构:$CPU_Arch"

   info5
   info4 "CPU的负载情况"
   info2 "  一分钟负载:${load_1}"
   info2 "  五分钟负载:${load_5}"
   info2 "十五分钟负载:${load_15}"
   info5
   info4 "CPU进程占用情况"
   printf "\e[34m  %-5s%-8s %-4s%-7s %-6s %-5s %-s %-3s %-s %-5s %-7s %-5s  \e[0m\n"  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
   top b -n1 | head -17 | tail -10

}

#查看磁盘相关信息
getDiskStatus(){
  echo ""
  info5

  df -hiP | sed 's/Mounted on/Mounted/'> /tmp/inode
  df -hTP | sed 's/Mounted on/Mounted/'> /tmp/disk 
  #cat /tmp/disk 
  local name_disk=()
  local size_disk=()
  local disk_name=$(fdisk  -l| grep "Disk /dev"|awk 'BEGIN{FS=":"};{print $1,$NF}'|awk '{print $2}')
  local disk_Size=$(fdisk  -l| grep "Disk /dev"|awk 'BEGIN{FS=":"};{print $1,$NF}'|awk '{print $3$4}' |awk -F ',' '{print $1}')
  for i in  ${disk_name};do name_disk[${#name_disk[*]}]=$i;done
  for ii in ${disk_Size};do size_disk[${#size_disk[*]}]=$ii;done
  local num=$(fdisk  -l| grep "Disk /dev"|awk 'BEGIN{FS=":"};{print $1,$NF}'|awk '{print $3$4}' |awk -F ',' '{print $1}'|wc -l)
  local num_01=`for((i=0;i<$num;i++)); do echo $i; done`

  info4 "磁盘(disk)的基本信息"
  printf "\e[34m%-35s %-10s \e[0m\n" Disk_name Size
  for i in $num_01
  do
     printf "\e[31m%-35s %-10s \e[0m\n" ${name_disk[i]} ${size_disk[i]}
  done
  info5
  info4 "磁盘(disk)使用详情"
  printf "\e[34m%-32s %-4s %-4s %-4s %-5s %-3s \e[0m\n" Disk_name Size Used Avail Use% Mounted_on
  df -h |grep /dev/
  #join /tmp/disk /tmp/inode | awk '{print $1,$2,"|",$3,$4,$5,$6,"|",$8,$9,$10,$11,"|",$12}'| column -t
  local disk_name_all_1=()
  local disk_uuid1=()
  local disk_type1=()
  local disk_name_all=`blkid|awk -F: '{print $1}'`
  local disk_uuid=`blkid|awk  '{print $2}'|awk -F '"' '{print $2}'`
  local disk_type=`blkid|awk  '{print $3}'|awk -F '"' '{print $2}'`
  for i in  ${disk_name_all};do disk_name_all_1[${#disk_name_all_1[*]}]=$i;done
  for i in  ${disk_uuid};do disk_uuid1[${#disk_uuid1[*]}]=$i;done
  for i in  ${disk_type};do disk_type1[${#disk_type1[*]}]=$i;done
  local num1=$(blkid|awk  '{print $1}' | wc -l)
  local num_02=`for((i=0;i<$num1;i++)); do echo $i; done`
  info5
  info4 "磁盘(disk)设备详情"
  printf "\e[34m%-48s %-24s %-20s \e[0m\n" Disk_name  UUID Type
  for i in $num_02
  do
 #echo ${disk_name_all_1[i]} ${disk_uuid1[i]} ${disk_type1[i]}
  printf "\e[31m%-32s %-40s %-20s \e[0m\n" ${disk_name_all_1[i]} ${disk_uuid1[i]} ${disk_type1[i]}
 done
  info5
  info4 "磁盘(IO)使用详情"
  iostat
  info3
  iostat_log_run
}
#查看内存相关信息
getMemStatus(){
   echo ""
   info5
   info4 "内存检查"
   if [[ $centosVersion < 7 ]];then
      free -mo
   else
     free -h
   fi
 #报表信息
  MemTotal=$(grep MemTotal /proc/meminfo| awk '{print $2}') #KB
  MemFree=$(grep MemFree /proc/meminfo| awk '{print $2}') #KB
  MemAvailable=$(grep -i Cached /proc/meminfo | awk '{print $2}' |head -1) #KB
  SwapTotal=$(grep SwapTotal /proc/meminfo| awk '{print $2}')
  SwapFree=$(grep SwapFree /proc/meminfo| awk '{print $2}') #KB
  let MemUsed=MemTotal-MemFree
  MemPercent=$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")
  report_MemTotal="$((MemTotal/1024))" #内存总容量(MB)
  report_MemFree="$((MemFree/1024))" #内存剩余(MB)
  report_MemAvai="$((MemAvailable/1024))" #使用中(MB)
  #swap
  report_swapTotal="$((SwapTotal/1024))""MB" #内存总容量(MB)
  report_swapFree="$((SwapFree/1024))""MB" #内存剩余(MB)
  let Memfree=MemAvailable+MemFree
  let MemUsed=MemTotal-Memfree
  report_Mem="$((Memfree/1024))""MB"
  report_MemUsedPercent="$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")""%" #内存使用率%
  info5
  info4 "   内存报表信息查询"
  info2 "          内存总容量(MB):${report_MemTotal}MB"
  info2 "尚未被使用的物理内存数量:${report_MemAvai}MB" 
  info2 "            内存剩余(MB):${report_MemFree}MB+${report_MemAvai}MB=${report_Mem}"
  info2 "              内存使用率:${report_MemUsedPercent}"
  info6 "      交换分区内存总容量:${report_swapTotal}"
  info6 "    交换分区内存使用容量:${report_swapTotal}"

  info5
  info4 "内存进程占用查询" 
  printf "\e[34m%-5s %-5s %-7s %-7s \e[0m\n" PID %MEM RSS COMMAND
  echo -e "$(ps aux | awk '{print $2, $4, $6, $11}' | sort -k3rn | head -n 10 )"| column -t 

}
#网卡信息
getnetworkstatus(){
 echo ""
 local ifs=(`ifconfig | egrep "^e|^d|^l" | awk -F: '{print $1}'`)
 info5
 info4 "网卡及IP"
 info  "网卡名\t IP地址"
 for i in `echo ${ifs[@]}`;do info6 "${i}\t `ifconfig ${i} | awk 'NR==2{print $2}'`" ;done
 info3 
 info4 "网卡基本信息"
 local a=`ifconfig | egrep "^e|^d" |awk -F ':' '{print $1}'`
 local b=`for i in $a;  do  echo $(ifconfig ${i} |grep inet6 |awk '{print $2}') ;done`
 local ipv4=$(for i in $a;do echo "`ifconfig ${i} | awk 'NR==2{print $2}'`" ;done)
 local netmask=$(for i in $a ;do echo `ifconfig  $i|grep netmask|awk '{print $4}'` ;   done)
 local broadcast=$(for i in $a ;do echo `ifconfig  $i|grep broadcast|awk '{print $6}'` ;   done)
 local RX_packets=$(for i in $a ;do echo `ifconfig $i|grep "RX packets"|awk -F '(' '{print $2}'|cut -d ")" -f 1|awk '{print $1}'` ;   done)
 local TX_packets=$(for i in $a ;do echo `ifconfig $i|grep "TX packets"|awk -F '(' '{print $2}'|cut -d ")" -f 1|awk '{print $1}'` ;   done)
 local num=`ifconfig | egrep "^e|^d|^l" |awk -F ':' '{print $1}'|wc -l`
 local num_01=`for((i=0;i<$num;i++)); do echo $i; done`
  #ipv4
  for i in $ipv4 ;do  network_ipv4[${#network_ipv4[*]}]=$i ;done
  #ipv6
  for i in $b;  do network_ipv6[${#network_ipv6[*]}]=$i ; done
  #网卡名
  eth_name=(`ifconfig | egrep "^e|^d" | awk -F: '{print $1}'`)
  #netmask 子网掩码
  for i in $netmask;  do network_netmask[${#network_netmask[*]}]=$i ; done
  #broadcast 默认网关
  for i in $broadcast;  do network_broadcast[${#network_broadcast[*]}]=$i ; done
  #RX packets 出流量
  for i in $RX_packets;  do network_RX_packets[${#network_RX_packets[*]}]=$i ; done
  #TX packets 进流量
  for i in $TX_packets;  do network_TX_packets[${#network_TX_packets[*]}]=$i ; done


 printf "\e[34m%-2s %-15s %-15s %-12s %-0s %-15s %-23s\e[0m\n"  Network IPV4 Netmask Broadcas  RX_packets TX_packets IPV6
 for i in $num_01
  do
   echo -e "${eth_name[i]}\t${network_ipv4[i]}\t${network_netmask[i]}\t${network_broadcast[i]}\t${network_RX_packets[i]}\t${network_TX_packets[i]}\t${network_ipv6[i]}\t"
 done

}

#服务器信息
getservertatus(){
    echo ""
    if [ `rpm -qa | grep ^bc | wc -l` -eq 1 ];then 
    info5
    local code1=`dmidecode |grep -i "system information" -A9 |grep -i -E "Man" |awk -F: '{print $2}'`
    local code2=`dmidecode |grep -i "system information" -A9 |grep -i -E "pro" |awk -F: '{print $2}'`
    local code3=`dmidecode |grep -i "system information" -A9 |grep -i -E "ser" |awk -F: '{print $2}'`
    local bios=`dmidecode -t bios|grep -i Version|awk -F: '{print $2}'`
    #查看逻辑CPU数量
    local cpu1=`cat /proc/cpuinfo |grep "processor" |sort |uniq |wc -l`
    local cpu2=`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`
    #cpu使用率
    local cpuid=`top -b -n 1|grep -i cpu|awk '/st$/'|awk '{print $8}'|grep ^[0-9]`
    local cpunum=100-${cpuid}
    local ad=`echo ${cpunum}|bc`
    local free1=`free -m|awk '{print $4}'|grep  ^[1-9]|awk 'NR==1'|tr -cd "[0-9]"`
    local avai1=`free -m|awk '{print $7}'|grep ^[0-9]|awk 'NR==1'|tr -cd "[0-9]"`
    local avai=`free -h|awk '{print $7}'|grep ^[0-9]|awk 'NR==1'`
    local disk=`lsblk|grep /$|awk '/\//{print $4}'`
    local total=`free -h|awk '{print $2}'|grep ^[1-9]|awk 'NR==1'`
    local free=`free -h|awk '{print $4}'|grep  ^[1-9]|awk 'NR==1'`
    local num=${free1}+${avai1}
    local upavil=`uptime | awk '{print $(NF-2),$(NF-1),$NF}'`


    info7 "   服务器厂商: ${code1}\033[0m"
    info7 "   服务器版本: ${code2}\033[0m"
    info7 " 服务器序列号: ${code3}\033[0m"
    info7 "   bios版本号: ${bios}\033[0m"
    info7 "  逻辑CPU数量:  ${cpu1}\033[0m"
    info7 "      CPU数量:  ${cpu2}\033[0m"
    info7 "    CPU使用率:  ${ad}\033[0m"
    info7 " 根目录总容量:  ${disk}\033[0m"
    info7 "   内存总容量:  ${total}\033[0m"
    info7 " 内存使用容量:  ${free}+${avai}=$((num))M\033[0m"
    info7 "  cpu平均负载:  ${upavil}\033[0m"
   else
       info3
       info "因脚本需要,需要安装bc命令,请等待!!!"
       yum -y install bc >/dev/null
       [ $? -eq 0 ] && info6 "bc 安装成功"
       getservertatus
 fi
}
#查看网卡实时流量
traffic(){
 local NIC=$1
 echo -e " 进 ------ 出"
 while true; do
    OLD_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev)
    OLD_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)
    sleep 1
    NEW_IN=$(awk  '$0~"'$NIC'"{print $2}' /proc/net/dev)
    NEW_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)
    IN=$(printf "%.1f%s" "$((($NEW_IN-$OLD_IN)/1024))" "KB/s")
    OUT=$(printf "%.1f%s" "$((($NEW_OUT-$OLD_OUT)/1024))" "KB/s")
    echo "$IN $OUT"
    sleep 1
 done
}
#################################################################################
#                                                                               #
#                             常见脚本,下载RPM安装包                            #
#                                                                               #
#################################################################################
#下载rpm的命令
rpm_run(){
 local dir="$1"
   info "start download ${rpm_name},wait !!!"
   yum  -y install --downloadonly --downloaddir=${dir} ${rpm_name} &>/dev/null
  if [ $? -eq 0 ] ;then
       info "${rpm_name}及相关依赖下载完成,安装包的路径是:${dir}"
     else
       info2 "${rpmdump_name}及相关依赖下载失败,请检查${rpm_name}的yum仓库是否配置"
       exit -1
  fi
}
#配置yum仓库
rpm_wget_repo(){
 if [ -f /etc/yum.repos.d/CentOS-Base.repo  ];then
      info "阿里云yum仓库已配置"
       if [ `rpm -qa | grep epel-release|wc -l` -eq 0 ];then
           yum -y install epel-release.noarch >/dev/null
           [ $? -eq 0 ]&& info4 "epel-release 安装成功"
       fi
  else 
      curl http://mirrors.aliyun.com/repo/Centos-7.repo > /etc/yum.repos.d/CentOS-Base.repo >/dev/null
      rpm_wget_repo
 fi
}
#rpm下载启动
rpm_download_run(){
 info7 "请根据提示选择:"
 read   -p "请输入RPM包存放路径(/opt/rpm):" rpm_dir 
 read   -p "请输入RPM安装包名称:" rpm_name 
 local rpm_dir=${rpm_dir:-/opt/rpm}
 if [ -z ${rpm_dir} ] || [[ -z ${rpm_name} ]];then
    info6 "请重新输入" 
    rpm_log
    rpm_download_run
 else
   #配置yum仓库
   rpm_wget_repo
   rpm_run ${rpm_dir} ${rpm_name}
 fi
}

#################################################################################
# 数据库服务                                                                    #
#                            mysql服务启动脚本                                  #
#                                                                               #
#################################################################################
#
mysql_run(){
    local registory=`docker images --format {{.Repository}}:{{.Tag}}|grep ${mysql_images}|wc -l`

 ###########################docker mysql##################
 [ ! -d ${MYSQL_HOME} ] && mkdir -p ${MYSQL_HOME}

 info2 "Pull the image MySQL Wait !!!"
   if [ ${registory} -ne 1 ];then
         docker pull ${mysql_images} &> /dev/null
   fi
 [ $? -eq 0 ] && info2 "Pull the image MySQL success"
 info2 "Start Mysql to the root user"
 a=`docker ps -a | grep ${mysql_name}|wc -l`
 if [ $a -eq 1 ];then
     docker rm -f ${mysql_name} &>/dev/null
     docker run -d -p ${mysql_port}:3306 --name ${mysql_name} -v ${MYSQL_HOME}:/var/lib/mysql  \
     -e MYSQL_ROOT_PASSWORD=${mysql_passwd} -u root --privileged=true  ${mysql_images} &>/dev/null
 else
     docker run -d -p ${mysql_port}:3306 --name ${mysql_name} -v ${MYSQL_HOME}:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=${mysql_passwd} -u root --privileged=true  ${mysql_images} &>/dev/null
 fi
 [ $? -eq 0 ] && info "Pull the image MySQL success"
 info "mysql root password is ${mysql_passwd}"


}

#启动方式
start_mysql(){
 read -p "请输入mysql数据持久化存储目录(/opt/mysql):" mysql_home
 read -p "请输入mysql容器启动的容器名称(mysql):" mysql_name
 read -p "请输入mysql容器启动的镜像版本(mysql:5.7):" mysql_version
 read -p "请输入mysql容器启动的初始密码(123456):" mysql_password
 read -p "请输入mysql容器启动的初始密码(3306):" mysql_port
 MYSQL_HOME="${mysql_home:-/opt/mysql}"
 mysql_name="${mysql_name:-mysql}"
 mysql_images="${mysql_version:-mysql:5.7}"
 mysql_passwd="${mysql_password:-123456}"
 mysql_port="${mysql_port:-3306}"
 if [ -z ${mysql_home} ] && [ -z ${mysql_name} ] && [ -z ${mysql_version} ]&& [ -z ${mysql_password} ]&& [ -z ${mysql_port} ];then
   info8 "请根据提示,输入所有的值"
   exit 0
 else
 info8 "第一次使用,选择启动方式必须是: run"
 read -p "选择${mysql_name}的启动方式:(run|restart|start|stop|rm)" mysql_start_run1
  case $mysql_start_run1 in
     'run')      
         mysql_run
         info  "\033[34m 进入数据库后执行以下命令进行用户授权 \033[0m"
         info "docker exec -it ${mysql_name} mysql -p${mysql_passwd}"
         info "grant all on *.* to admin@\"%\" identified by \"123qqq...A\" ;";;
     'restart')
         docker restart ${mysql_name} &>/dev/null
         [ $? -eq 0 ] && info " ${mysql_name} Restart successful"||log;;
     'start')
            docker start ${mysql_name} &>/dev/null
            [ $? -eq 0 ] &&  info " ${mysql_name} Start successful"||log;;
     'stop')
           docker stop ${mysql_name} &>/dev/null
           [ $? -eq 0 ] &&   info " ${mysql_name} Stop successful"||log;;
     'rm')
              docker rm -f ${mysql_name} &>/dev/null
           [ $? -eq 0 ] &&  info " ${mysql_name} delete successful"||log;;
      '*')   
              info "脚本执行错误,请检查后继续";;
   esac
  fi
}

redis_run(){
  local registory=`docker images --format {{.Repository}}:{{.Tag}}|grep ${redis_images}|wc -l`

 ###########################docker mysql##################
 [ ! -d ${redis_HOME} ] && mkdir -p ${redis_HOME}/data
 cd ${redis_HOME}
  info2 "加载配置文件"
 cat > redis.conf <<EOF
 bind 0.0.0.0 
 port 6379
 protected-mode no
 daemonize no     
 databases 16  
 masterauth 123456
 dir  ./      
 appendonly yes 
EOF
 sed -i "s/123456/${redis_password}/g"  redis.conf

 info2 "Pull the image ${redis_images} Wait !!!"
   if [ ${registory} -ne 1 ];then
         docker pull ${redis_images} &> /dev/null
   fi
 [ $? -eq 0 ] && info2 "Pull the image  ${redis_images} success"
 info2 "Start ${redis_name} to the root user"

 
 a=`docker ps -a | grep ${redis_name}|wc -l`

 if [ $a -eq 1 ];then
     docker rm -f ${redis_name} &>/dev/null
     docker run -p ${redis_port}:6379 --name ${redis_name} -v ${redis_HOME}/redis.conf:/etc/redis/redis.conf \
           -v ${redis_HOME}/data:/data -d redis redis-server \
             /etc/redis/redis.conf --appendonly yes  &>/dev/null
   else
     docker run -p ${redis_port}:6379 --name ${redis_name} -v ${redis_HOME}/redis.conf:/etc/redis/redis.conf \
           -v ${redis_HOME}/data:/data -d redis redis-server \
             /etc/redis/redis.conf --appendonly yes  &>/dev/null
 fi
 [ $? -eq 0 ] && info "start the image ${redis_name} success"
}

start_redis(){
 read -p "请输入redis数据持久化存储目录(/opt/redis):" redis_home
 read -p "请输入redis容器启动的容器名称(redis):" redis_name
 read -p "请输入redis容器启动的镜像版本(redis:4.0.9):" redis_version
 read -p "请输入redis容器启动的初始密码(123456):" redis_password
 read -p "请输入redis容器启动的初始密码(6379):" redis_port
 redis_HOME="${redis_home:-/opt/redis}"
 redis_name="${redis_name:-redis}"
 redis_images="${redis_version:-redis:4.0.9}"
 redis_password="${redis_password:-123456}"
 redis_port="${redis_port:-6379}"
 if [ -z ${redis_home} ] && [ -z ${redis_name} ] && [ -z ${redis_version} ]&& [ -z ${redis_password} ]&& [ -z ${redis_port} ];then
   info8 "请根据提示,输入所有的值"
   exit 0
 else
 info8 "第一次使用,选择启动方式必须是: run"
 read -p "选择${redis_name}的启动方式:(run|restart|start|stop|rm):" redis_start_run1
 if [ -z ${redis_start_run1} ];then
       info6 "请重新输入"    
       info5
       Service_database
 else
   case $redis_start_run1 in
     'run')      
         redis_run;;
     'restart')
         docker restart ${redis_name} &>/dev/null
         [ $? -eq 0 ] && info " ${redis_name} Restart successful";;
     'start')
            docker start ${redis_name} &>/dev/null
            [ $? -eq 0 ] &&  info " ${redis_name} Start successful";;
     'stop')
           docker stop ${redis_name} &>/dev/null
           [ $? -eq 0 ] &&   info " ${redis_name} Stop successful";;
     'rm')
              docker rm -f ${redis_name} &>/dev/null
           [ $? -eq 0 ] &&  info " ${redis_name} delete successful";;
      '*')   
              info "脚本执行错误,请检查后继续";;
   esac
  fi
 fi
}


#################################################################################
#                                                                               #
#                            中间件服务启动脚本                                  #
#                                                                               #
#################################################################################
zk_server(){
 local registory=`docker images --format {{.Repository}}:{{.Tag}}|grep ${zookeeper_version}|wc -l`
 if [ ${registory} -eq 0 ];then
     docker pull ${node_exporter_images} &>/dev/null
  else
    bashpath="$(cd `dirname $0`;pwd)"
    [ ! -d ${zookeeper_home} ] && mkdir -p ${zookeeper_home}
    [ $? -eq 0 ] && info "mkdir ${zookeeper_home} success"
    if [ `docker ps -a | grep  ${zookeeper_name}|wc -l` -eq 1 ];then
         docker rm -f ${zookeeper_name}
         docker run -d -p ${zk_port}:2181 -v ${zookeeper_home}:/data/  \
               --name zookeeper --privileged ${zookeeper_version} &>/dev/null
         [ $? -eq 0 ] && info "${zookeeper_name} start success"
     else
         docker run -d -p ${zk_port}:2181 -v ${zookeeper_home}:/data/  \
               --name zookeeper --privileged ${zookeeper_version} &>/dev/null
         [ $? -eq 0 ] && info "${zookeeper_name} start success"
   
   fi
 fi
}
start_zk(){
  echo ""
  info5
  read -p "请输入zookeeper数据持久化存储目录(/opt/zookeeper):" zookeeper_home
  read -p "请输入zookeeper容器启动的容器名称(zookeeper):" zookeeper_name
  read -p "请输入zookeeper容器启动的容器端口(2181):" zk_port
  read -p "请输入zookeeper容器启动的镜像版本(zookeeper:3.4.9):" zookeeper_version
  zookeeper_version=${zookeeper_version:-zookeeper:3.4.9}
  zookeeper_name=${zookeeper_name:-zookeeper}
  zk_port=${zk_port:-2181}
  zookeeper_home=${zookeeper_home:-/opt/zookeeper}


  if [ -z ${zookeeper_version} ] && [ -z ${zookeeper_name} ] && [ -z ${zk_port} ]&& [ -z ${zookeeper_home} ];then
   info8 "请根据提示,输入所有的值"
   exit 0
 else
 info8 "第一次使用,选择启动方式必须是: run"
 read -p "选择${zookeeper_name}的启动方式:(run|restart|start|stop|rm):" zk_start_run1
 if [ -z ${zk_start_run1} ];then
       info6 "请重新输入"    
       info5
       middleware_server_run
 else
   case $zk_start_run1 in
     'run')      
         zk_server;;
     'restart')
         docker restart ${zookeeper_name} &>/dev/null
         [ $? -eq 0 ] && info " ${zookeeper_name} Restart successful";;
     'start')
            docker start ${zookeeper_name} &>/dev/null
            [ $? -eq 0 ] &&  info " ${zookeeper_name} Start successful";;
     'stop')
           docker stop ${zookeeper_name} &>/dev/null
           [ $? -eq 0 ] &&   info " ${zookeeper_name} Stop successful";;
     'rm')
              docker rm -f ${zookeeper_name} &>/dev/null
           [ $? -eq 0 ] &&  info " ${zookeeper_name} delete successful";;
      '*')   
              info "脚本执行错误,请检查后继续";;
   esac
  fi
 fi

}
#################################################################################
#                                                                               #
#                            harbor服务启动脚本                                  #
#                                                                               #
#################################################################################
start_harbor(){
   echo ""
 info5 
 source ${bashpath}/script/base_harbor.sh
 read -p "      离线安装包名称,默认(harbor-offline-installer-v2.0.1.tgz):" harbor_images
 read -p "  离线安装包存放路径,默认(/opt):" harbor_path
 read -p "离线安装包解压后名称,默认(harbor):" harbor_name_path
 read -p "离线安装包的镜像名称,默认(harbor.v2.0.1.tar.gz)" harbor_images_name
 read -p "    Harbor访问的域名,默认(registry.harbor.com):" harbor_hostname
 read -p "Harbor访问平台的密码,默认(Harbor12345):" harbor_password
 read -p "Harbor访问平台的端口,默认(8081):" harbor_http_port
 read -p "    Harbor数据持久化,挂载卷(\/opt\/harbor\/data):" harbor_volume
 local harbor_images=${harbor_images:-harbor-offline-installer-v2.0.1.tgz}
 local harbor_path=${harbor_path:-/opt}
 local harbor_hostname=${harbor_hostname:-registry.harbor.com}
 local harbor_password=${harbor_password:-Harbor12345}
 local harbor_http_port=${harbor_http_port:-8081}
 local harbor_name_path="${harbor_name_path:-harbor}"
 local harbor_images_name=${harbor_images_name:-harbor.v2.0.1.tar.gz}
 local harbor_volume=${harbor_volume:-\/opt\/harbor\/data}
 #在线下载路径
 harbor_compose_path="/opt/harbor"
 docker_compose_name="docker-compose"
 harbor_conn="https://github.com/goharbor/harbor/releases/download/v2.3.1/harbor-offline-installer-v2.3.1.tgz"
 harbor_conn_name="harbor-offline-installer-v2.3.1.tgz"
 docker_compose_conn="https://github.com/docker/compose/releases/download/1.25.1/docker-compose-$(uname -s)-$(uname -m)"

 if [[ $1 == "install" ]];then
 if [ -d ${harbor_path}/${harbor_name_path} ];then
       if [ -f ${harbor_path}/${harbor_name_path}/${docker_compose_name} ];then
              harbor_install    
       else
              harbor_install_zaixian
       fi
 else
      if [ -d ${harbor_path}/${harbor_name_path} ];then
             info "Harbor installation directory already exists"
        else
            mkdir -p ${harbor_path}/${harbor_name_path}
            log
            exit 0
           
      fi
 fi
 else
    Usage 
    exit -1
  
 fi
}
#################################################################################
#                                                                               #
#                            常用脚本使用                                        #
# 服务器系统配置初始化脚本                                                        #
#################################################################################
#常用脚本使用									                                          #
#										                                                  #
#服务器系统配置初始化脚本							                                     #
#################################################################################
run_set_system(){
   echo ""
   info5
 # 设置时区并同步时间
 read -p "设置ssh超时时间(600):" time
 read -p "是否禁止root用户远程登录(yes),默认允许:" ban
 read -p "是否安装基础安装包(vim,wget...),默认允许安装(yes):" install
 read -p "是否检查基础设置是否成功(yes/no),默认自动检查:" check_system
 read -p "设置主机名称(myos):" hostname_name
 info "重新加载yum仓库,请等待!!!"
 yum makecache >/dev/null 
 local repolost_num=`yum repolist|grep repolist|awk -F: '{print $2}'|cut -c2`
 local check_system=${check_system:-yes}
 local tmout_time=${time:-600}
 local ban_root=${ban:-no}
 local install_run=${install:-yes}
 local hostname_name=${hostname_name:-myos}
 #判断
 if [ $repolost_num -eq 0 ];then
   read -p "检测到没有yum仓库,是否添加阿里云yum仓库(yes/no),默认添加:"  aliyun_yum_1
   aliyun_yum_2=${aliyun_yum_1:-yes}
   if [ ${aliyun_yum_2} == "yes" ] ;then
       aliyun_yum           
   fi 
 fi
 #设置主机名
 info6 "设置主机名${hostname_name}"
 hostnamectl set-hostname ${hostname_name} 


 info6 "设置时区,并同步时间"
 time=`timedatectl |grep "Time zone"|awk '{print $3}'`
 if [ ${time} == "Asia/Shanghai" ];then
          info7 "当前时区:${time}"
     else
          info7 "当前时区:${time}"
             info "Set time zone to Shanghai"
             timedatectl set-timezone Asia/Shanghai
             info `timedatectl |grep "Time zone"|awk '{print $3}'` 
  fi
 #ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 #if [ `crontab -l |grep ntpdate|wc -l` -eq 0 ]; then
 #   echo "* 1 * * * ntpdate ntp1.aliyun.com >/dev/null 2>&1"
 #fi

 # 禁用selinux
 info6 "设置selinux策略模式"
 selinux=`sestatus |grep "SELinux status" |awk '{print $3}'`
 if [ ${selinux} == disabled ];then
        echo -e "\033[32m selinux禁用成功 \033[0m"
  else
        info6 "Disable SELinux"
        setenforce 0
       # sed -i 's/^SELINUX=.\*/SELINUX=disabled/' /etc/selinux/config
        sed -i  '/^SELINUX/s/enforcing/disabled/'  /etc/selinux/config
      [ $? -eq 0 ] && info9 "设置selinux策略的状态disabled成功,重启生效"
 fi
 # 关闭防火墙
 info6 "开始关闭防火墙"
 if egrep "7.[0-9]" /etc/redhat-release &>/dev/null; then
    systemctl stop firewalld  >/dev/null
    systemctl disable firewalld  >/dev/null
 elif egrep "6.[0-9]" /etc/redhat-release &>/dev/null; then
    service iptables stop  >/dev/null
    chkconfig iptables off  >/dev/null
 fi
 [ $? -eq 0 ] && info9 "firewalld 关闭成功"


 # 历史命令显示操作时间
 info6 "修改history历史命令的输出格式"
 if ! grep HISTTIMEFORMAT /etc/bashrc; then
    echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/bashrc  >/dev/null
 fi
 [ $? -eq 0 ] && info9 "history历史命令的输出格式已设置"



 # SSH超时时间
 info6 "设置ssh超时时间"
 if ! grep "TMOUT=${tmout_time}" /etc/profile &>/dev/null; then
    echo "export TMOUT=${tmout_time}" >> /etc/profile
 fi
 [ $? -eq 0 ] && info9 "超时时间设置:TMOUT=${tmout_time}"
 

 # 禁止root远程登录
 if [ ${ban_root} == "yes" ];then
    info6 "禁止root远程登录"
    sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
    [ $? -eq 0 ] && info9 "禁止root远程登录,设置成功"
 fi 
 # 禁止定时任务向发送邮件
 info6 "设置禁止定时任务向发送邮件"
 sed -i 's/^MAILTO=root/MAILTO=""/' /etc/crontab
 [ $? -eq 0 ] && info9 "禁止定时任务向发送邮件设置成功"

 # 设置最大打开文件数
 info6 "设置最大打开文件数"
 if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; then
      cat >> /etc/security/limits.conf << EOF
    * soft nofile 65535
    * hard nofile 65535
EOF
    ulimit  -n 65535
    ulimit -SHn 65535
 fi
 [ $? -eq 0 ] && info9 "设置最大打开文件数"

 # 禁用SWAP使用
  Free=`free -h|grep -i swap|awk '{print $2}'|cut -c 1`
 if [ ${Free} -eq 0 ];then
        info7 "Swap禁用成功"
   else
        info7 "Swap未禁用"
        info "Disable swap"
        swapoff -a
        sed -ri 's/.*swap.*/#&/' /etc/fstab  
        info "Disable swap success"
 fi
 swapoff -a
 echo "0" > /proc/sys/vm/swappiness



 # 安装系统性能分析工具及其他
 if [ ${install_run} == "yes" ];then
    info6 "安装系统性能分析工具及其他,请等待!!!"
    yum  -y install ${rpm_name} >/dev/null
    [ $? -eq 0 ] && info9 "安装系统基础工具:\n ${rpm_name} install success"
 fi
 # 系统内核优化
 local system_num=`egrep "tcp_syncookies|tcp_max_tw_buckets|max_syn_backlog|netdev_max_backlog|tcp_fin_timeout" /etc/sysctl.conf |wc -l `
 if [ ${system_num} -eq 0 ];then
 cat >> /etc/sysctl.conf << EOF
 net.ipv4.tcp_syncookies = 1
 net.ipv4.tcp_max_tw_buckets = 20480
 net.ipv4.tcp_max_syn_backlog = 20480
 net.core.netdev_max_backlog = 262144
 net.ipv4.tcp_fin_timeout = 20
EOF
 fi
 
 if [ ${check_system} == "yes" ];then
       check_system_run
 fi
}
####################################################
#清理登录系统的信息
Clean_up_system_login(){
  echo ""
  info5
  read -p "是否检查历史命令信息,默认显示最后10行(yes/no):" history_name
  read -p "是否检查登录系统的用户名单,默认允许(yes/no):" last_name
  read -p "是否检查登入系统失败的用户相关信息,默认允许(yes/no):" lastb_name
  read -p "是否确认全部清理系统登录信息(yes/no),默认禁止:" name 
  info3
 local name=${name:-no}
 local lastb_name=${lastb_name:-yes}
 local last_name=${last_name:-yes}
 local history_name=${history_name:-yes}
   if [ ${history_name} == yes ];then
    info "显示最后10行历史命令"
    cat /$USER/.bash_history |tail -10
 fi
  if [ ${lastb_name} == yes ];then
   info "登录系统的用户名单"
     last |head -10
 fi
  if [ ${history_name} == yes ];then
    info "显示最后10行历史命令"
    cat /$USER/.bash_history |tail -10
 fi
 if [ ${lastb_name} == yes ];then
    info6 "登入系统失败的用户相关信息"
     lastb  |head -10
 fi

 if [ ${name} == yes ];then 
    echo > /var/log/wtmp
    echo > /var/log/btmp 
    echo > /$USER/.bash_history

    [ $? -eq 0 ] && info "系统登录信息清理成功"
 fi

}
#统计当前系统中可以登录计算机的账户有多少个
Count_the_number(){
   echo ""
   info5 
   count_num=`grep "bash$" /etc/passwd | wc -l`
   info "当前系统中可以登录计算机的账户: ${count_num}"
   
}
Count_number_documents(){
   echo ""
   info5 
   # 统计/var/log 有多少个文件,并显示这些文件名 
   # 使用 ls 递归显示所有,再判断是否为文件,如果是文件则计数器加 1
   cd  /var/log
   sum=0
 info4 "/var/log的文件名"
 info3
 for i in `ls -r *`
 do
   if [ -f $i ];then
       let sum++
         info2 "文件名:$i"
     fi
 done
 info3
 info "总文件数量为:$sum"
}
################################################################################
#                                                                              #
#                                   进度条                                     #
#                                                                              #
################################################################################
processBar(){
    now=$1
    all=$2
    arr=('|' '/' '-' '\\')
    percent=`awk BEGIN'{printf "%f", ('$now'/'$all')}'`
    len=`awk BEGIN'{printf "%d", (100*'$percent')}'`
    bar='>'
    for((i=0;i<len-1;i++))
    do
        bar="#"$bar
    done
    #printf "[%-10s][%03d/%03d]\r" $bar $len 100  
    for((i=0;i<=${now};i++))
     do 
       let index=i%4
    printf  "[%-10s][%03d/%03d]\r[%c]" $bar $len 100 ${arr[$index]}
     done
}
run_process(){
 whole=$1
 process=$2
 while [ $process -lt $whole ] 
 do
    let process++   
    processBar $process $whole
    sleep 0.1
 done
 printf "\n"
}


################################################################################
#                                                                              #
#                                   yum源                                      #
#                                                                              #
################################################################################
install_chronyd_server(){
   echo ""
   info5
   local chronyd_rpm=`rpm -qa | grep chrony|wc -l`
   read -p "允许客户端登连接服务端的网段,默认(192.168.1.0/24)" ntp_ipaddr
   local ntp_ipaddr=${ntp_ipaddr:-192.168.1.0/24}
   if [ ${chronyd_rpm}  -eq 1 ];then 
        info2 "`rpm -qa | grep chrony` 已安装"
        info5
         if [ -f  /etc/chrony.conf ];then
                #修改配置文件
                sed -i '/^server/ s/^\(.*\)$/#\1/g' /etc/chrony.conf
                sed -i '/^# Please/ a server ntp2.aliyun.com  iburst'  /etc/chrony.conf
                #allow 192.168.0.0/16
                sed -i "25 a allow $ntp_ipaddr"  /etc/chrony.conf
                systemctl  restart chronyd.service
                systemctl  enable chronyd.service
                info3
                info2 "验证时间同步是否成功"
                chronyc sources -v
          else
               info6 "/etc/chrony.conf 不存在,请检查后重试"
               exit 0
          fi
   else
       yum -y install chrony >/dev/null
       if [ $? -eq 0  ];then    
           
          if [ -f  /etc/chrony.conf ];then
                #修改配置文件
                sed -i '/^server/ s/^\(.*\)$/#\1/g' /etc/chrony.conf
                sed -i '/^# Please/ a server ntp2.aliyun.com  iburst'  /etc/chrony.conf
                #allow 192.168.0.0/16
                sed -i "25 a allow $ntp_ipaddr"  /etc/chrony.conf
                systemctl  restart chronyd.service
                systemctl  enable chronyd.service
                info3
                info2 "验证时间同步是否成功"
                chronyc sources -v
          else
               info6 "/etc/chrony.conf 不存在,请检查后重试"
               exit 0
          fi
       else
            read -p "是否加载阿里云yum(yes/no):" aliyun_yum_3 
            local aliyun_yum_3=${aliyun_yum_3:-yes}
                if [ $aliyun_yum_3 == "yes" ];then
                      aliyun_yum
                 else
                      info6 "未加载yum源,检查口进行确定"
                      exit 0
                fi 
       fi
   fi
 }
 
install_chronyd_client(){
  echo ""
   info5
   local chronyd_rpm=`rpm -qa | grep chrony|wc -l`
   read -p "客户端登连接服务端的地址,默认(192.168.1.100)" ntp_ipaddr
   local ntp_ipaddr=${ntp_ipaddr:-192.168.1.100}
   if [ ${chronyd_rpm}  -eq 1 ];then 
        info2 "`rpm -qa | grep chrony` 已安装"
        info5
         if [ -f  /etc/chrony.conf ];then
                #修改配置文件
                sed -i '/^server/ s/^\(.*\)$/#\1/g' /etc/chrony.conf
                sed -i "/^# Please/ a server $ntp_ipaddr  iburst"  /etc/chrony.conf
                systemctl  restart chronyd.service
                systemctl  enable chronyd.service
                info3
                info2 "验证时间同步是否成功"
                chronyc sources -v
          else
               info6 "/etc/chrony.conf 不存在,请检查后重试"
               exit 0
          fi
   else
       yum -y install chrony >/dev/null
       if [ $? -eq 0  ];then    
           
          if [ -f  /etc/chrony.conf ];then
                #修改配置文件
                sed -i '/^server/ s/^\(.*\)$/#\1/g' /etc/chrony.conf
                sed -i "/^# Please/ a server $ntp_ipaddr  iburst"  /etc/chrony.conf
                systemctl  restart chronyd.service
                systemctl  enable chronyd.service
                info3
                info2 "验证时间同步是否成功"
                chronyc sources -v
          else
               info6 "/etc/chrony.conf 不存在,请检查后重试"
               exit 0
          fi
       else
            read -p "是否加载阿里云yum(yes/no):" aliyun_yum_3 
            local aliyun_yum_3=${aliyun_yum_3:-yes}
                if [ $aliyun_yum_3 == "yes" ];then
                      aliyun_yum
                 else
                      info6 "未加载yum源,检查口进行确定"
                      exit 0
                fi 
       fi
   fi
}

#################################################################################
#                                                                               #
#                            docker基础环境部署                                 #
#                                                                               #
#################################################################################
#
install_docker(){
 #官方网站下载最新版docker
  info "官方网站下载最新版docker"
  yum install -y vim  yum-utils bash-completion net-tools gcc ipvsadm  wget ipset bc &>/dev/null
  if [ $? -eq 0 ];then
          info "安装docker的相关依赖包"
        else
          info8 "install docker CE fail"
  fi
  wget -O  /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  &>/dev/null
  yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &>/dev/null
   if [ $? -eq 0 ];then
          info "添加docker的在线yum仓库"
        else
          info8 "install docker CE fail"
  fi
  info6 "重新加载yum仓库,根据网速决定等待的时间,请耐心等待!!!"
  yum makecache &>/dev/null
  info "yum仓库加载成功"
  info3 
  info4 "开始安装docker基础环境,亲耐心等待"
  yum -y install docker-ce &> /dev/null
  [ $? -eq 0 ] && info2 "docker 环境安装成功" 
  #开启路由转发
 cat >>/etc/sysctl.conf<<EOF
 net.ipv4.ip_forward = 1
EOF
 sysctl -p  &>/dev/null

 #添加阿里云镜像加速器
 mkdir -p /etc/docker
 tee /etc/docker/daemon.json <<-'EOF'
 {
   "registry-mirrors": ["https://geuj9lut.mirror.aliyuncs.com"]
 }
EOF

}
#启动docker
start_docker(){
 if [ `rpm -qa|grep docker |wc -l` -eq 0 ];then
   install_docker
     systemctl daemon-reload
     systemctl restart docker
     systemctl enable docker >/dev/null
  else
    a=`rpm -qa|grep docker-ce|tail -1`
   info8 "\033[32m ${a}已安装,不需要重新部署\033[0m"
   local docker_status=`systemctl  status docker |grep Active|awk '{print $2}'`
     if [ ! ${docker_status} == "active" ];then
         systemctl start docker
         info8 "\033[32m docker服务已重新正常启动\033[0m"
      else
         info8 "\033[32m docker服务已正常启动!!!\033[0m"
         run
    fi    
  fi

}
#################################################################################
#                                                                               #
#                              环境检查                                         #
#                                                                               #
#################################################################################
#网络状态检查函数
network_check(){
 echo ""
 info2 "正在检测网络,请稍等..."
   ping -c 2 www.baidu.com >/dev/null
 if [ $? -eq 0 ];then
    info7 "网络连接正常,请继续!!!"
   info3
   else
   info6 "网络连接失败,请检查网络后重新执行"
   network_check_run="1"
   exit -1
 fi
}

#docker环境检查
docker_check(){
 echo ""
 info7 "正在检测docker基础环境,请稍等..."
 local docker_version=`docker --version|awk -F ',' '{print $1}'|awk '{print $3}'`
 local docker_status=`systemctl  status docker |grep Active|awk '{print $2}'`
 local docker_driver=`docker info | grep -i "Cgroup Driver"|awk  '{print $3}'`
 local docker_home=`docker info|grep -i "docker root dir"|awk  '{print $4}'`

 if [ ${docker_status} == "active" ];then
    info2 "docker      版本: ${docker_version}"
    info2 "docker      状态: ${docker_status}"
    info2 "docker  文件系统: ${docker_driver}"
    info2 "docker    家目录: ${docker_home}"
    info7 "docker基础环境正常运行,请继续!!!"
   echo "-------------------------------------------------------------------"
   else
   info6 "docker未启动或者当前机器未安装docker,请选择\"docker基础环境\"先安装环境后再启动服务"
   server_run
 fi
}
#基础环境检查
check_system_run(){
 #定义变量
 local sorf=`ulimit  -n`
 local hard=`ulimit  -Hn`
 local selinux=`sestatus |grep "SELinux status" |awk '{print $3}'`
 local time=`timedatectl |grep "Time zone"|awk '{print $3}'`
 local selinux=`sestatus |grep "SELinux status" |awk '{print $3}'`
 local firewalld=`systemctl status firewalld|awk '/Active/{print $2}'`
 local tmount=`grep TMOUT /etc/profile | awk '{print $2}'`
 local Free=`free -h|grep -i swap|awk '{print $2}'|cut -c 1`
 local rpm=`rpm -qa | egrep "wget|net-tools|vim|sysstat|bash-completion|net-tools" `
 local num=`rpm -qa | egrep "wget|net-tools|vim|sysstat|bash-completion|net-tools" |wc -l `
 local num_01=`for((i=0;i<$num;i++)); do echo $i; done`
 
 echo ""
 info5
 info8 "时区检查"
  if [ ${time} == "Asia/Shanghai" ];then
          info7 "当前时区:${time}"
          info3
          info4 "时间同步服务"
          chronyc sources -V
          info3
     else
          info7 "当前时区:${time}"
          info3
          info4 "时间同步服务"
          chronyc sources -V
          info3
  fi
 info3 
 info8 "selinux策略模式"
 if [ ${selinux} == disabled ];then
        info7 "selinux禁用成功,${selinux}"
  else
        info7 "selinux尚未禁用,${selinux}" 
 fi
 info3
 info8 "firewalld防火墙"
 if [ $firewalld == "inactive" ];then
       info7 "firewalld禁用成功 \033[0m"
  else
       info7 "firewalld尚未禁用 \033[0m"
 fi

 if [ ! -z $tmount  ];then
 info3
        info8 "ssh超时时间"
        info7 "${tmount}"
 fi
 local ssh_port=`ss -ntulp | grep sshd|awk  'NR==1{print $5}' |awk -F: '{print $2}'`
  if [ ! -z $ssh_port  ];then
 info3
        info8 "ssh端口"
        info7 "${ssh_port}"
 fi
 info3
 info8 "文件描述符"
   info7 "最大警告值:soft ${sorf}"
   info7 "      阈值:hard ${hard}"
 info3
 info8 "交换分区"
 if [ ${Free} -eq 0 ];then
        info7 "Swap禁用成功"
   else
        info7 "Swap未禁用"
        info7 "交换分区总total: `free -h|grep -i swap|awk '{print $2}'`"
 fi
 info3
 info8 "基础工具"
 for i in $rpm ;do rpm_check[${#rpm_check[*]}]=$i ;done
 info4 "查看${rpm_name}\n 是否安装:"
 for i in $num_01
  do
    info6 "${rpm_check[i]}"
 done

 info3
 info8 "系统内核优化"
 cat /etc/sysctl.conf |grep -v  "^#" |grep $#
 info5

}

check_k8s_docker_run(){
   info3
   docker_check
   if [ $? -eq 0 ];then
     if [ `rpm -qa | grep kubelet|wc -l` -eq 1 ];then
      info1 "check k8s status"
      info2 "k8s version list"
         kubectl version
      echo ""
      info2 "All Healthy status check"
         kubectl get componentstatus
      echo ""
         info2 "k8s cluster info list"
      kubectl cluster-info
      echo ""
      info2 "k8s all nodes list"
         kubectl get nodes
      info2 "k8s all-namespaces's pods list"
         kubectl get pod --all-namespaces
      echo ""
      info2 "k8s all-namespaces's service network"
         kubectl get svc --all-namespaces
      echo ""
      info4 "===================================k8s welcome for you==================================="
   else
      info6 "当前机器未安装k8s.请安装后重试"
       exit 0
   fi
 else
      info6 "请检查docker环境是否安装"
      server_run
 fi

}
#检查harbor的状态
start_harbor_check(){
   echo ""
   info5
   local compose_pant_name=`find /usr/local/ -name docker-compose |wc -l`
   if [ ${compose_pant_name} -eq 1 ];then
   read -p "请输入harbor的安装目录,默认(/opt/harbor/harbor):" harbor_path
   local harbor_path=${harbor_path:-/opt/harbor/harbor}
   read -p "请选择重启(restart),启动(start),停止(stop),默认(check):" harbor_check
   local harbor_check=${harbor_check:-check}
   info3
   cd ${harbor_path}
   case $harbor_check in
     'check')
            docker-compose ps
            if  [ `docker-compose ps|grep -i exit|wc -l` -ne 0 ];then
                  info8 "重新harbor服务,请稍等"
                  docker-compose down -v
                  docker-compose up -d
            fi;;
     'restart')
             docker-compose down -v
              
             [ $? -eq 0 ] && check " ${harbor_name_path} Restart successful";;
     'start')
             docker-compose up -d
            [ $? -eq 0 ] &&  check " ${harbor_name_path} Start successful";;
     'stop')
             docker-compose down -v
           [ $? -eq 0 ] &&   check " ${harbor_name_path} Stop successful";;
       '*')   
              info  "\033[91m sh $0 start|stop|restart \033[0m"
              info "脚本执行错误,请检查后继续";;
    esac
  else
    info8 "Harbor在【`hostname`】主机中未安装"
  fi  
}
################################################################################
#                                                                              #
#                              启动函数                                        #
#                                                                              #
################################################################################
#启动函数
#1、系统资源查看
system_run(){
           System_resources
        if [ -z ${system} ];then
          info6 "请重新输入"    
          info5
          run
    else
      case ${system} in
         '1')
            getCpuStatus;;
         '2')
            getDiskStatus;;
         '3')
            getMemStatus;;
         '4')
            getnetworkstatus;;
         '5')
            getservertatus;;
         '6')
            getCpuStatus
            getMemStatus
            getDiskStatus
            getnetworkstatus
            getservertatus
            ;;
         'q')
            echo ""
            exit 0;;
         
         esac
         fi
}
#2.网卡实时流量
traffic_run(){
 echo ""
 local traffic_name=$(ifconfig  |grep mtu|awk -F ':' '{print $1}')
 info5
 info "当前主机上的网卡名称"
 ifs=(`ifconfig | egrep "^e|^d|^l" | awk -F: '{print $1}'`)
 printf "\e[36m %-10s %-8s \e[0m\n"  网卡名 IP地址
 for i in `echo ${ifs[@]}`;do echo -e "${i}\t `ifconfig ${i} | awk 'NR==2{print $2}'`" ;done
 #for i in $traffic_name; do  echo $i; done
 info3
 echo  "q【退出】                                                         Enter【主页面】" 
 read -p "输入的网卡名称:" network
 if [ -z ${network} ];then
      info6 "请输出网卡名称,当前未输入"
      info6 "请重新输入"   
      info5 
      run
   else
     if [ ${network} == "q" ];then
          exit 0
     else
         traffic ${network}
   fi
 fi
}
#监控服务(prometheus、zabbix)及其组件
monitor_server_run(){
   docker_check
   Service_Prometheus
   if [ -z ${monitoring} ];then
      info6 "请重新输入"  
      info5  
      server_run
   else
      case ${monitoring} in 
        '1')
            #Prometheus
            echo ""
            sh ${bashpath}/monitor/start_prometheus.sh;;
        '2')
          #grafana
          echo ""
          sh ${bashpath}/monitor/start_grafana.sh;;
         '3')
          #cadvisor
         echo ""
          sh ${bashpath}/monitor/start_cadvisor.sh;; 
         '4')
         #node_export
          echo ""
           sh ${bashpath}/monitor/start_node_export.sh;;
          '5')
           #pushgateway
           echo ""
           sh ${bashpath}/monitor/start_pushgateway.sh;;
         'h')
           #help
           echo ""
           monitoring_help;;    
         'q')
        echo ""
         exit 0;;               
        esac
  fi
}
#数据库服务
database_server_run(){
    echo ""
    docker_check
    Service_database
    if [ -z ${database} ];then
       info6 "请重新输入"    
       info5
       server_run
     else
         case ${database} in 
             '1')
                  #Mysql
                  start_mysql;;
             '2')
                  Service_database_redis
                    if [ -z ${database_redis} ];then
                       info6 "请重新输入"    
                       info5
                       server_run
                     else
                         case ${database_redis} in 
                            '1')
                                echo ""
                                start_redis ;;
                            '2')
                                echo ""
                                info8 "未完成"
                                info3
                                database_server_run;;
                            'h')
                                echo ""
                                info6 "未完成";;
                            'q')
                                echo ""
                                exit 0;;
                          esac
                      fi;;            
              'h')
                   database_help
                   database_server_run;;
              'q')
                   echo ""
                   exit 0;;               
           esac
      fi
}
#harbor服务
harbor_server_run(){
   #Harbor
   echo ""
   docker_check
   Harbor_SERVICE
   if [ -z ${harbor_Service} ];then
      info6 "请重新输入"    
      info5
      server_run
   else
      case ${harbor_Service} in 
         '1')
           #Mysql
              start_harbor install;;
         '2')
              start_harbor_check;;
         '3')
              info6 "尚未完成"
              start_harbor_check;;
         'h')
              harbor_help;;
         'q')
             echo ""
             exit 0;;              
         esac
 fi
}
#3、常见服务部署
server_run(){
   network_check
   Service_deployment
        if [ -z ${Service} ];then
            info6 "请重新输入"    
            info5
            run
        else
             case ${Service} in
              '1')
              #docker基础环境
              echo ""
                  start_docker;;
              '2')
              #监控服务(prometheus、zabbix)及其组件
                 monitor_server_run;; 
              '3')
              #数据库服务
                  database_server_run ;; 
              '4')
              #harbor服务
                 harbor_server_run;; 
              'q')
                  echo ""
                  exit 0;;
           esac
         fi
}
#4.常用脚本使用
used_script_run(){
   network_check
   Commonly_used_script
   if [ -z ${script} ];then
            info6 "请重新输入"
            info5    
               run
        else
             case ${script} in
              '1')
              #docker基础环境
              echo ""
              rpm_download_run;;
              '2')
              #
               sh ${bashpath}/script/harbor_ssl.sh;;
              '3')
              #echo ""
                run_set_system;;
              '4')
                Clean_up_system_login;;
              '5')
                Count_the_number;;
              '6')
                Count_number_documents;;
              'h')
               script_help;;
              'q')
                  echo ""
                  exit 0;;
           esac
         fi
}
#6.基础环境检查
env_config_peizhi(){
   network_check
   env_config
   if [ -z ${env_script} ];then
            info6 "请重新输入"
            info5    
               run
        else
             case ${env_script} in
              '1')
              #docker基础环境
              echo ""
                 run_set_system;;
              '2')
                 install_chronyd_server;;
              '3')
                 install_chronyd_client;;
              '4')
                 check_system_run;;
              '5')
                 check_k8s_docker_run;;
              '6')
                 start_harbor_check;;
              'h')
               env_help
               info5
               env_config_peizhi;;
              'q')
                  echo ""
                  exit 0;;
           esac
         fi
}
#7.中间件服务
middleware_server_run(){
   docker_check
   middleware_server
   if [ -z ${middleware} ];then
      info6 "请重新输入"  
      info5  
      middleware_server_run
   else
      case ${middleware} in 
        '1')
            #start_zk
            start_zk;;
         'h')
           #help
           echo ""
           monitoring_help;;    
         'q')
        echo ""
         exit 0;;               
        esac
  fi
}
#构建基础镜像
basi_build_run(){
   docker_check
   basi_build
   if [ -z ${basi_build_num} ];then
      info6 "请重新输入"  
      info5  
      basi_build_run
   else
      case ${basi_build_num} in 
        '1')
            echo ""
            sh ${bashpath}/script/build_kafka.sh  ;;
                     
         'h')
           #help
           echo ""
           basi_build_help;;    
         'q')
        echo ""
         exit 0;;               
        esac
  fi
}



################################################################################
#                                                                              #
#                                   yum源                                      #
#                                                                              #
################################################################################
#yum源
aliyun_yum(){
 echo ""
 info "官方网站下载最新版(CentOS7)"
  ls /etc/yum.repos.d/*.repo
 if [ $? -eq 0 ];then
   [ -d /etc/yum.repos.d/bak ] || mkdir /etc/yum.repos.d/bak
    mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ 
 fi
 if [ `rpm -qa|grep ^wget|wc -l` -eq 1 ];then
        wget -O  /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo &>/dev/null
    else
       curl  http://mirrors.aliyun.com/repo/Centos-7.repo -o /etc/yum.repos.d/CentOS-Base.repo
 fi

 yum makecache >/dev/null
 [ $? -eq 0 ] && info "Aliyun yum 源加载成功"
}
tenxun_yum(){
   echo ""
 info "官方网站下载最新版(CentOS7)"
 ls /etc/yum.repos.d/*.repo
 if [ $? -eq 0 ];then
   [ -d /etc/yum.repos.d/bak ] || mkdir /etc/yum.repos.d/bak
    mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ 
 fi

  if [ `rpm -qa|grep ^wget|wc -l` -eq 1 ];then
      #base源
      wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo &>/dev/null
      #epel源
      wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo >/dev/null
      #参考文档 http://docs.kubernetes.org.cn/457.html,官方网址国内 无法访问,使用腾讯云
    else
       curl   http://mirrors.cloud.tencent.com/repo/centos7_base.repo -o /etc/yum.repos.d/CentOS-Base.repo
       curl http://mirrors.cloud.tencent.com/repo/epel-7.repo -o  /etc/yum.repos.d/epel.repo
 fi
 yum makecache >/dev/null
 [ $? -eq 0 ] && info "腾讯 yum 源加载成功"
}
wangyiyun(){
 echo ""
 info "官方网站下载最新版(CentOS7)"
 ls /etc/yum.repos.d/*.repo
 if [ $? -eq 0 ];then
   [ -d /etc/yum.repos.d/bak ] || mkdir /etc/yum.repos.d/bak
    mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ 
 fi
  if [ `rpm -qa|grep ^wget|wc -l` -eq 1 ];then
          wget -O /etc/yum.repos.d/CentOS-Base.repo  http://mirrors.163.com/.help/CentOS6-Base-163.repo  &>/dev/null
    else
       curl  http://mirrors.163.com/.help/CentOS6-Base-163.repo -o /etc/yum.repos.d/CentOS-Base.repo
 fi
 yum makecache  >/dev/null
 [ $? -eq 0 ] && info "网易 yum 源加载成功"
}
################################################################################
#5、Yum仓库安装
Service_yum_run(){
 Service_yum_repoistory1
 if [ -z ${yum_repoistory1} ];then
          info6 "请重新输入"    
          info5
          run
    else
      case ${yum_repoistory1} in
         '1')
            yum repolist  
            #run_process 10 1
            ;;
         '2')
            yum makecache;;
         '3')
            network_check
            Service_yum_repoistory
             if [ -z ${yum_repoistory} ];then
                info6 "请重新输入"    
                info5
                  Service_yum_run
                else
                  case ${yum_repoistory} in
                    '1')
                           aliyun_yum;;
                    '2')
                           tenxun_yum;;
                    '3')
                           wangyiyun;;
                    'h')
                        echo ""
                        env_help

                        info5
                        env_config_peizhi;;
                     'q')
                         echo ""
                  exit 0;;
           esac
         fi ;;
         'q')
            echo ""
            exit 0;;
   esac
 fi
}
################################################################################
#                                                                              #
#                               启动面板                                       #
#                                                                              #
################################################################################
index_run(){
 info3
 echo -e "                           CentOS7 系统菜单   "
 info3
 echo  "                          1、系统资源查看" 
 echo  "                          2、网卡实时流量"
 echo  "                          3、常见服务部署"
 echo  -e "\033[36m                          4、自定义脚本\033[0m"
 echo  "                          5、Yum仓库配置"
 echo  "                          6、基础环境配置"
 echo  -e "\033[35m                          7、中间件服务\033[0m"
  echo  -e "\033[34m                          8、docker镜像构建\033[0m"
 info3 
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 info3
 read  -n1 -p "请输入对应的数字编号:" check
}
#1、系统资源查看面板
System_resources(){
   echo ""
   echo "请选择你要查看的系统资源:"
   echo "1) CPU"
   echo "2) 磁盘"
   echo "3) 内存"
   echo "4) 网卡"
   echo "5) 服务器"
   echo "6) ALL"
 info3
  echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" system
}
#二级面板,常见服务部署
Service_deployment(){
   echo ""
   echo -e "\033[36m 个人原因:喜欢使用docker去部署相应的服务,所以该脚本上的服务大多基于docker环境使用的 \033[0m " 
   echo "请选择你要部署服务:"
   echo "1) docker基础环境"
   echo "2) 监控服务(prometheus、zabbix)及其组件"
   echo "3) 数据库服务"
   echo "4) Harbor"
   info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" Service
}
#
Harbor_SERVICE(){
   echo -e "\033[36m 个人原因:喜欢使用docker去部署相应的服务,所以该脚本上的服务大多基于docker环境使用的 \033[0m " 
   echo "请选择你要部署的方式:"
   echo "1) http install"
   echo "2) http check "
   echo "3) https(未完成)"
   info3
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" harbor_Service
}
#三级监控服务(prometheus、zabbix)及其组件面板
Service_Prometheus(){
   echo ""
   info5
   echo "请选择你要部署服务:"
   echo "1) Prometheus"
   echo "2) Grafana"
   echo "3) cadvisor"
   echo "4) node_export"
   echo "5) Pushgateway" 
   echo "h) 帮助信息" 
 info3
 echo  "q【退出】                                                         Enter【主页面】" 

 read  -n1 -p "请输入对应的数字编号:" monitoring
}
#三级数据库服务()及其组件面板
Service_database(){
   echo ""
   info5
   echo "请选择你要部署服务:"
   echo "1) Mysql"
   echo "2) redis"
   echo "3) mongo"
   echo "4) Oracle"
   echo "5) RabbitMQ" 
 info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read -n1  -p "请输入对应的数字编号:" database
}
Service_database_redis(){
   echo ""
   info5
   echo "请选择你要部署服务:"
   echo "1) redis(单机)"
   echo "2) redis(集群)"
   echo "h) 帮助信息" 
 info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read -n1 -p "请输入对应的数字编号:" database_redis
}


#三级面板,yum常见服务部署
Service_yum_repoistory1(){
   echo ""
   info5
   info4 "yum源配置" 
   echo "请选择你要部署服务:"
   echo "1) 检查yum源仓库"
   echo "2) 重新加载yum源仓库"
   echo "3) 配置yum源仓库"
   info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" yum_repoistory1
}
#二级面板,常见服务部署
Service_yum_repoistory(){
   echo ""
   echo -e "\033[32m 建议使用阿里源\033[0m " 
   echo "请选择你要部署服务:"
   echo "1) 阿里源"
   echo "2) 腾讯源"
   echo "3) 网易yum源"
   info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" yum_repoistory
}
#二级面板、常用脚本使用
Commonly_used_script(){
   echo ""
   info5
   echo "请选择你要使用的脚本:"
   echo "1) rpm下载"
   echo "2) harbor证书生成脚本"
   echo -e "3)\033[34m 初始化服务器配置\033[0m"
   echo -e "4)\033[31m 清理系统登录信息\033[0m"
   echo "5) 统计当前系统中可以登录计算机的账户有多少个" 
   echo "6) 统计/var/log 有多少个文件,并显示这些文件名"
 info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" script   
}
#基础环境配置
env_config(){
   echo ""
   info5
   echo "请选择你要使用的脚本:"
   echo -e "1)\033[91m 初始化服务器配置\033[0m"
   echo "2) chronyd时间同步服务端"
   echo "3) chronyd时间同步客户端"
   echo "4) 基础环境检查"
   echo "5) k8s/docker环境检查"
   echo "6) harbor服务检查及服务重新操作"
    info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" env_script   
}
#中间件服务
middleware_server(){
   echo ""
   info5
   echo "请选择你要部署服务:"
   echo "1) zookeeper"
   echo "2) kafka"
 info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read -n1  -p "请输入对应的数字编号:" middleware
}
#8、镜像构建
basi_build(){
   echo ""
   info5
   echo "请选择你要构建的镜像:"
   echo "1) kafka"
   info3
   echo  "h【帮助】                                                         Enter【主页面】" 
   echo  "q【退出】                                                         Enter【主页面】" 
 read -n1  -p "请输入对应的数字编号:" basi_build_num
}
################################################################################
#                                                                              #
#                               帮助信息                                       #
#                                                                              #
################################################################################
help(){
   echo ""
 info5
 info7 "脚本注解:"
 info8 "该脚本整合了本人学习脚本过程中所写的脚本,以及网上开源的脚本"
 info8 "结合统一的启动门户($0),实现统一的管理,不过内容添加的越多,越觉得脚本冗余性太复杂"
 info8 "执行方式:"
 info "sh $0"
 info8 "根据屏幕上的输出信息, 进行填写即可"   
 info5
}
script_help(){
   echo ""
   info5
   info4 "帮助信息"
   info3
   info7 "1) rpm下载脚本,通过页面上的提示进行选择性的下载指定的安装包,并且存放到执行的路径下"
   info6 "注意: 1.默认路径是: /opt/rpm"
   info6 "      2.下载多个安装包时: 只需要在填写包名时,以空格为分隔符即可"
   info3
   info7 "2) harbor证书生成脚本,脚本未集成至$0脚本中,调用harbor_ssl.sh脚本执行"
   info6 "注意: 1.脚本生成的证书,在ssl目录下把certs.d目录打包成certs_d.tar.gz,复制其他docker客户端使用"
   info6 "      2.复制到docker客户端的/etc/docker/目录下"
   info6 "      3.执行tar -xvf registry.harbor.cn.tar.gz,解压到当前路径"
   info6 "      4.在daemon.json文件中添加\"insecure-registries\": [\"registry.harbor.cn\"]"
   info6 "其中,服务使用的证书也在此目录下,需要根据实际情况,修改对应的harbor.yml文件,重启harbor服务即可实现https登录harbor"
   info3
   info7 "3) 初始化服务器配置,是因为每次新装一台linux服务器后,都需要做一些基础的操作,例如"
   info6 "selinux、firewalld、ntp时间同步、文件描述的限制、基础安装包(vim、bash-completion...)"
   info6 "注意: 1.可以配合主页面\"基础环境检查\"进行查看配置是否生效"
   info6 "      2.selinux、内核参数的限制需要重启服务器后生效"
   info6 "      3.设置的主机名需要重新打开一次终端,或者直接在命令行中输入:\"bash\""

info5
used_script_run
}

basi_build_help(){
   source ${bashpath}/conf/conf.conf
   echo ""
   info5
   info4 "帮助信息"
   info3
   info7 "1) kafka"
   info6 "kafka镜像构建依赖于jdk的环境,所以需要提前准备好jdk的安装包(${basic_pkg})"
   info6 "需要提前确认好jdk的版本,如果版本如默认的不一致,则需要修改对应的Dockerfile"
   info6 "把下载好的安装包,存放在当前机器上的一个目录下即可(手动)"
   info7 "kafka的版本则是根据kafka的安装包而定的,也是需要手动下载,与jdk安装包放置在同一目录下"

   info5
   basi_build_run
}

#输出日志
rpm_log(){
 info2 "使用本脚本时,需要链接外网"
 info2 "请检查网络的连接"
 info2 "后面的路径可以是相对路径,或者绝对路径"
}
iostat_log_run(){
  info4 "cpu属性值说明"
  info2 "%user:CPU处在用户模式下的时间百分比"
  info2 "%nice:CPU处在带NICE值的用户模式下的时间百分比"
  info2 "%system:CPU处在系统模式下的时间百分比"
  info2 "%iowait:CPU等待输入输出完成时间的百分比"
  info2 "%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比"
  info2 "%idle:CPU空闲时间百分比"
  info3 
  info4 "Device属性值说明"
  info2 "tps:该设备每秒的传输次数"
  info2 "kB_read/s:每秒从设备(drive expressed)读取的数据量"
  info2 "kB_wrtn/s:每秒向设备(drive expressed)写入的数据量"
  info2 "kB_read:  读取的总数据量"
  info2 "kB_wrtn:写入的总数量数据量"
}
#监控信息监控帮助信息
monitoring_help(){
   info3
   info4 "选项帮助信息"
   info6 "1)Prometheus"
   info2 "Prometheus,因配置文件外置,需要根据实际情况编写,当前尚未自动化维护配置文件,所以需要手动需要手动修改"
   info2 "prometheus.yml文件存放路径是:${bashpath}/monitor/prometheus.yml"
   info3 "2)Grafana"
   info2 "Grafana数据可视化展示,把Prometheus对接的采集"
}
#harbor
harbor_help(){
   info4 "harbor信息帮助"
}
env_help(){
   info3
   info4 "选项帮助信息"
   info6 "1)初始化服务器配置"
   info7 "\033[31m 初次装机时进行的相应基础的配置033\0m(ssh超时时间、安装基础安装包、设置主机名、修改时区、统内核优化等)"
   info3
   info6 "2) chronyd时间同步服务端"
   info2 "CentOS7上部署chronyd时间同步服务,且指定外网地址(阿里云时间同步服务器)"
   info2 "可通过: chronyc sources -v进行检查时间"
   info6 "3) chronyd时间同步客户端"
   info2 "CentOS7上部署chronyd时间同步服务,且指定外网地址(阿里云时间同步服务器)"
   info2 "可通过: chronyc sources -v进行检查时间"
   info3
   info6 "4) 基础环境检查"
   info2 "检查上面的初始化服务配置是否成功"
}
database_help(){
   info3
   info4 "选项帮助信息"
   info6 "1)mysql"
   info7 "需要安装docker环境且网络状态良好"
   info3
   info6 "2) redis"
   info2 "需要安装docker环境且网络状态良好"

   info6 "3) Oracle"
   info2 "需要安装docker环境且网络状态良好"
   info3
   info6 "4) RabbitMQ"
   info2 "需要安装docker环境且网络状态良好"
}

################################################################################
#                                                                              #
#                          启动方式,第一主页面                                 #
#                                                                              #
################################################################################
#启动方式,第一主页面
run(){
 index_run
 if [ -z ${check} ];then
      info6 "请重新输入"    
      run
   else
   case $check in
     '1')
       system_run;;
      #sh script/check.sh ;;
     '2') 
         traffic_run ;;
     '3')
        server_run ;;
     '4')
         used_script_run;;
     '5')
         Service_yum_run;;
      '6') 
         env_config_peizhi;;
      '7')
         middleware_server_run;;
      '8')
         basi_build_run;;
     'h')
         help
         index_run;;
     'q')
         echo ""
         exit 0 ;;
    esac
 fi
}
############################################################################
run
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Linux运维常用脚本有很多种,以下列举了一些常用的脚本: 1. 日志备份脚本:用于定期备份重要的日志文件,以防止数据丢失或磁盘空间不足。 2. 系统性能监控脚本:用于定期监控服务器的系统资源利用情况,如CPU、内存、磁盘使用率等,并生成报告以便及时发现问题。 3. 网络状态检测脚本:通过ping命令或其他网络状态检测工具,定期检测服务器的网络连通性和延迟情况,帮助及时发现网络故障。 4. 程序进程监控脚本:用于监控服务器上的进程状态,如是否存在异常进程、是否占用过高的资源等,以保证服务器的稳定性和安全性。 5. 系统备份恢复脚本:用于定期备份整个系统的相关配置文件和数据,并提供恢复功能,以防止系统故障导致的数据丢失。 6. 安全审计脚本:用于定期审计系统的安全性,如检查是否存在未授权登录、异常登录等安全问题,并生成报告提供给管理员进行处理。 7. 软件安装脚本:用于批量安装系统所需的软件和依赖包,提升安装效率和减少人工操作的出错概率。 8. 自动化运维脚本:通过脚本实现一键自动化运维操作,如定时重启、服务启停、日志清理等,提高运维效率和减少工作负担。 这些脚本能够简化运维工作、提高效率、减少人工错误,是Linux运维工程师必备的工具之一。当然,根据实际需求,还可以根据自己的工作环境和项目需求编写自定义的脚本

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北城 半夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值