Linux应用服务检查脚本

Linux应用服务检查脚本

优秀脚本分享与记录!原链接已丢失!

#!/bin/bash
#基础信息
# v1.8-20220613
# v1.8调整磁盘检查项,处理软盘识别异常问题,新增fstab磁盘挂载配置文件检查
export LANG=en_US.utf8
hostname=`hostname`
date=`date "+%Y-%m-%d %H:%M:%S"`
scriptversion="install_check_v1.8-20220613"

# 查询端口
check_ports(){
  declare -A ports_dic
  ports_dic=([3306]="mysql" [9210]="前置" [9220]="前置中转" [9310]="规则管理" [9300]="规则引擎" [9250]="action引擎" [2020]="python action执行引擎" [9230]="playbook执行引擎" [9290]="openapi" [9100]="管理平台" [9110]="report" [443]="https" [80]="http" [2019]="ai服务" [5001]="syslog接入-client" [8082]="syslog接入-master" [9400]="es" [2181]="zookeeper" [9092]="kafka")
  ports_list=("3306" "9210" "9220" "9310" "9300" "9250" "2020" "9230" "9290" "9100" "9110" "443" "80" "2019" "5001" "8082" "9400" "2181" "9092")
  check_num=0
  for port in ${ports_list[*]}
  do
    check_port=`ss -antlp | grep $port' ' | grep LISTEN`
    if [ -n "$check_port" ]
    then 
      check_port_str=$check_port_str"!ERROR $port 端口被占用,将影响 \033[41;37m ${ports_dic[$port]} \033[0m 服务安装部署!!\n"
      check_num=1
    fi 
  done

  if [ $check_num -eq 0 ]
  then 
      check_port_str="所需端口未被占用,不影响安装!"
  fi 
  echo -e "$check_port_str"
}

# 查询进程
check_process(){
  process_list=("elastic" "zookeeper" "kafka" "mysql" "nginx")
  check_num=0
  for process in ${process_list[*]}
  do
    check_proc=`ps -ef | grep $process | grep -v grep`
    if [ -n "$check_proc" ]
    then 
          check_proc_str=$check_proc_str"!WARN \033[43;37m $process \033[0m服务已安装,可能影响HoneyGuide系统安装部署!!\n"
          check_num=1
    fi 
  done
  if [ $check_num -eq 0 ]
  then 
      check_proc_str="未发现HG相关进程,可继续执行HoneyGuide系统安装部署!"
  fi 
  echo -e "$check_proc_str"
}

# 检测daemon
check_daemon(){
  status=`id daemon 2>&1`
  str=`echo $status | grep "no such user" `
  if [[ $str != "" ]]; then
    daemon_str="!ERROR \033[41;37m daemon 用户异常,请检查daemon用户是否存在 \033[0m"
  else
    daemon_str="daemon 用户状态正常"
  fi
}

# 检测hosts
check_hosts(){
  chk_host="$(grep -i $(hostname) /etc/hosts)"
  if [[ $chk_host != "" ]]; then
    echo "hosts文件内容正常。"
  else
    echo -e "!WARN \033[43;37m hosts文件内容异常,请手动添加记录 \"127.0.0.1   $(hostname)\" \033[0m"
    echo -e "\033[43;37m 添加记录命令:echo \"127.0.0.1   $(hostname)\" >> /etc/hosts  \033[0m"
    echo -e "当前hosts文件内容如下:\n\nhosts文件内容:"
    cat /etc/hosts
  fi
}

# 检查umask及/etc/profile
check_umask(){
  #获取用户umask
  user_umask=`umask`
  if [ $user_umask -eq 0022 ]
  then 
      user_umaskstr="用户umask值符合要求,用户umask值:$user_umask"
  else 
      user_umaskstr="!ERROR \033[41;37m 用户umask值不符合要求,用户umask值:$user_umask ,建议设置为0022 \033[0m"
      user_umasknum=0
  fi 

  # 检查umask及/etc/profile
  source /etc/profile
  if [[ $? != 0 ]]; then
    echo "!ERROR /etc/profile source执行异常,请检查/etc/profile配置文件";
    exit 1;
  fi

  # 获取系统umask
  umask=`umask`
  if [ $umask -eq 0022 ]
  then 
      umaskstr="系统umask值符合要求,系统umask值:$umask"
  else 
      umaskstr="!ERROR \033[41;37m 系统umask值不符合要求,系统umask值:$umask ,建议设置为0022 \033[0m"
      umasknum=0
  fi
}

# 查询防火墙状态
check_firewall(){
    # 获取防火墙状态
    filewalld=`systemctl status firewalld | grep Active | awk '{print $2}'`
    if [ $filewalld = "active" ]
    then 
        fwport=`firewall-cmd --zone=public --list-ports`
        fwstr="防火墙已启动,已开放端口:$fwport"
    else 
        fwstr="!WARN \033[43;37m 防火墙未启动,建议启用防火墙保障系统安全!\033[0m  \n!WARN \033[43;37m 注意:如安装资产模块必须启用防火墙 \033[0m"
        fwnum=0
    fi 
}

# 查询磁盘空间
check_space(){
  devs=`lsblk -d -o NAME | grep -v sr | grep -v fd | awk '{if (NR>1){print "/dev/"$1}}'`
  unused_space=0
  for i in $devs; do
      # 查询总磁盘空间
      disk=`fdisk -l 2>&1| grep $i | awk -F': ' '{print $2}' | awk -F' ' '{print $1}'`
      # disk=`parted -l 2>&1| grep $i | awk -F': ' '{print $2}' | awk -F'GB' '{print $1}'`
      sum=`echo $disk | awk -F '.' '{print $1}'`
      allspace=$[$allspace+$sum]

      # 查询 已使用 及 未分配 磁盘空间
      status=`fdisk -l $i"1" 2>&1`
      str=`echo $status | grep "No such file"`
      space=`fdisk -l 2>&1| grep $i | awk -F': ' '{print $2}' | awk -F' ' '{print $1}'`
      if [[ $str != "" ]]; then
        if echo $space|grep "\." >/dev/null 2>&1
        then
          sum=`echo $space | awk -F '.' '{print $1}'`
          unused_space=$[$unused_space+$sum]
        else
          unused_space=$[$unused_space+$space]
        fi
      else
        sum=`echo $space | awk -F '.' '{print $1}'`
        use_space=$[$use_space+$sum]
      fi
  done

  echo "磁盘空间总量为:$allspace G,已挂载使用空间:$use_space G,未挂载空间:$unused_space G"

  # 查询校验opt空间
  optspace=`df -h /opt | sed -n '2p' | awk -F' ' '{print $4}'|  awk -F'G' '{print $1}'`
  checkopt=`echo $optspace | grep -i 't'`
  if [[ $checkopt != "" ]]; then
    echo "磁盘空间为:$allspace G,/opt目录空间:$optspace,已满足安装条件"
  else
    if [[ $allspace -ge $disktotal ]]; then
      if [[ $optspace -ge $opttotal ]]; then
        echo "磁盘空间为:$allspace G,/opt目录空间:$optspace G,已满足安装条件"
      else
        all=$[$optspace+$unused_space]
        if [[ $all -gt $opttotal ]]; then
          unusedstr="!WARN 存在可用未挂载磁盘,挂载后可满足安装条件,建议挂载使用"
        else
          unusedstr="!WARN 可用未挂载磁盘空间为:$unused_space G,无法满足安装条件,建议添加新硬盘"
        fi
        echo -e "!WARN 磁盘空间为:$allspace G,/opt目录空间:$optspace G,\033[43;37m /opt目录空间未满足安装条件,建议调整磁盘空间分配 \033[0m "
        echo -e "!WARN \033[43;37m $unusedstr \033[0m "
      fi
    else
      echo -e "!WARN \033[43;37m 磁盘空间不足,未满足安装条件;当前磁盘空间为:$allspace G,建议磁盘空间为 $disktotal G。\033[0m"
    fi
  fi

  # 查询校验tmp空间
    tmpspace=`df -h /tmp | sed -n '2p' | awk -F' ' '{print $4}'|  awk -F'G' '{print $1}'`
    tmp=10
    if [[ $tmpspace -ge $tmp ]]; then
        echo "/tmp磁盘空间为:$tmpspace G,已满足安装条件"
    else
      echo "!WARN \033[43;37m /tmp磁盘空间为:$tmpspace G,不满足安装条件 \033[0m"
    fi
}

# 检测fstab
check_fstab(){
  status=`mount -a 2>&1`
  if [[ $status != "" ]]; then
    fstab_status="!ERROR \033[41;37m fstab文件异常请及时处置 \033[0m"
  else
    fstab_status="磁盘挂载配置正常"
  fi
}

# 基础信息检查
base_check(){ 
  # 系统启动时间
  startTime=`date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"`
  
  # 获取系统版本
  ver=`cat /etc/redhat-release | awk -F' ' '{print $(NF-1)}'`
  version=${ver:0:3}
  #if [ `echo "$version > 7.2"|bc` -eq 1 ] && [ `echo "$version <= 7.9"|bc` -eq 1 ] ; 
  if [ `echo $version 7.3 | awk '{if($1>=$2) {print 1}}'` ] && [ `echo $version 7.9 | awk '{if($1<=$2) {print 1}}'` ] ;
  then
    versionstr="系统版本符合要求,当前系统版本:"$version
  else
    versionstr="!ERROR \033[41;37m 系统版本不符合要求,建议为RHEL 7.4-7.9,当前系统版本:$version \033[0m"
  fi

    #获取内存总量
    mem_total=`free -h | grep Mem | awk '{print $2}'`
    total=`free | grep Mem | awk '{print $2}'`
    if [ $total -gt $memtotal ]
    then 
        memstr="内存大小符合要求,物理内存总量:$mem_total"
    else 
        memstr="!ERROR \033[41;37m 内存大小不符合要求,物理内存总量:$mem_total ,建议大小为 $memdefault G \033[0m"
    fi 
  
    # 获取cpu信息
    cpu_info=` cat /proc/cpuinfo | grep avx | wc -l`
    if [ $cpu_info -gt 0 ]
    then 
        cpustr="CPU已支持AVX指令集"
    else 
        cpustr="!WARN \033[43;37m CPU不支持AVX指令集,将无法使用AI功能,请知悉!\033[0m"
    fi 
  cpus=`lscpu | grep "CPU(s):" | sed -n '1p' | awk -F' ' '{print $2}'`
  if [ $cpus -ge $cputotal ]
  then 
      cpusstr="CPU核心数已符合需求"
  else 
      cpusstr="!WARN \033[41;37m CPU核心数不符合需求,建议为 $cputotal 核以上 \033[0m"
  fi

  #判断IP地址是否为动态获取
  ipdhcp=`ip addr | grep ens | grep dynamic`
  if [[ ! -n $ipdhcp ]]; then
    ipstr="IP地址正常"
  else
    ipstr="!WARN \033[43;37m IP地址可能为动态获取,建议配置为静态IP地址,请手动确认  \033[0m"
  fi
  
  check_umask
  check_daemon
  check_fstab
  # 输出结果
  echo $scriptversion
  echo -e "\n\n主机名:"$hostname
  echo -e "系统版本:$versionstr"
  echo "系统启动时间:$startTime"
  echo "自检时间:"$date
  echo -e $user_umaskstr 
  echo -e $umaskstr
  echo -e $memstr
  echo -e $cpustr
  echo -e $cpusstr
  echo -e $ipstr
  echo -e $daemon_str
  check_space
  echo -e $fstab_status
  check_firewall
  check_ports
  check_process
  echo -e $fwstr
  check_hosts
}

# 检测是否安装
check_install(){
    if [ -f "/opt/shakespeare/version" ]; then
        check_res=1
      version=`cat /opt/shakespeare/version | grep version | awk -F'=' '{print $2}'`
      echo "HG系统版本为:$version"
      else
        check_res=0
      fi
}

# 环境字段初始
environment(){
  echo "
  1.POC(测试环境检查)
  
  2.PRO(正式交付环境检查)
  "
  read -p " 请输入您的操作(默认为:POC):" c
  
  if [ "$c" = 2 ];then
    echo "正式交付环境检查"
    cputotal=16
    memtotal=65011712
    memdefault=64
    disktotal=1000
    opttotal=800
  else
    echo "POC测试环境检查"
    cputotal=8
    memtotal=32505856
    memdefault=32
    disktotal=500
    opttotal=400
  fi

}

home(){
  clear
  echo -e "即将开始HG部署前自检"
  sleep 1
  check_install
  environment
  sleep 1
  if [ $check_res -eq 1 ]; then
    read -p "检测到honeyguide系统已完成安装,是否继续进行检查![Y/N](defult:N)" conopt
    if [ "$conopt" = "Y" ] || [ "$conopt" = "y" ];then
      echo "-----开始自检-----"
      base_check
      sleep 1
      echo "-----自检完成-----"
    else
      echo "-----结束自检-----"
    fi
  else
    echo "-----开始自检-----"
      base_check
      sleep 1
    echo "-----自检完成-----"
  fi
}
home
posted @ 2023-10-25 11:00  寻梦99  阅读(27)  评论(0)    收藏  举报