Linux常用脚本应用服务检查脚本

本文涉及的产品
云防火墙,500元 1000GB
简介: 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
}


相关文章
|
2月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
411 9
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
288 0
Linux系统初始化脚本
|
2月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
298 2
|
4月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
531 1
|
6月前
|
Java Linux
自定义linux脚本用于快速jar包启动、停止、重启
自定义linux脚本用于快速jar包启动、停止、重启
323 29
|
6月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
195 4
|
6月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
397 3
|
2月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
413 1
二、Linux文本处理与文件操作核心命令
|
2月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
289 137
|
2月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
665 57
下一篇
oss云网关配置