美文网首页
Linux常用的脚本

Linux常用的脚本

作者: nieniemin | 来源:发表于2021-03-29 13:49 被阅读0次

1.巡检脚本

巡检内容如下:
磁盘空间、物理cpu核数,逻辑CPU核数、获取ip地址/主机名称、内存、密码过期检查、nginx服务检查、nacos服务检查、MQ检查、服务检查。

#日常巡检脚本
        #!/bin/bash

        NGINX_IP_="111.11.2.47,111.11.2.16,111.6.0.21,111.16.10.16,192.168.10.114"
        NACOS_IP_="111.11.22.109,111.11.22.108,111.11.22.106,192.168.11.182"
        MYSQL_IP_="111.11.22.1011.2211.11.22.113,111.21.19.155"
        RABBITMQ_IP_="111.11.22.110,111.11.22.111,111.11.22.112"
        MPLATFORM_IP_="111.11.2.142,111.11.2.161,192.168.11.131"



        function color_echo()
        {
        printf "\e[%dm %s\e[0m \n" $1 "$2"
        }

        function echo_separator()
        {
        echo ""
        echo ""
        echo "$1"
        echo "--------------------------------------------------------------------------------------------------"

        }

        #1.检查磁盘空间.
        function check_disk()
        {

        echo_separator "磁盘空间检查"


        THRESH=70
        #root根节点.
        check_root=`df -P /|sed -n '2,$p'|awk -F '( |%)' -v t=$THRESH '{if ($(NF-2)>t){printf("根节点空间不足,fail\n")}}'`
        check_ratio=`df -P /|sed -n '2,$p'|awk '{print $5}'`
        if [ "x$check_root" != "x" ]
        then
        color_echo 31 "$check_root"
        fi
        #/datafile
        check_wwlocal=`df -P /datafile|sed -n '2,$p'|awk -F '( |%)' -v t=$THRESH '{if ($(NF-2)>t){printf("/datafile空间不足,使用率超过了阈值.fail\n")}}'`
        check_datafile_ratio=`df -P /datafile|sed -n '2,$p'|awk '{print $5}'`
        if [ "x$check_wwlocal" != "x" ]
        then
        color_echo 31 "$check_wwlocal"
        fi

        if [ "x$check_root" == "x" -a "x$check_wwlocal" == "x" ]
        then
        color_echo 34  "/根目录磁盘使用率情况:${check_ratio}.  /datafile目录磁盘使用率:${check_datafile_ratio}"
        fi
        }


        #2.物理cpu核数,逻辑CPU核数
        function check_phy_cpu()
        {

        echo_separator "CPU检查"
        phy_cpu=`cat /proc/cpuinfo | grep "physical id"|sort | uniq | wc -l`

        logic_cpu=`cat /proc/cpuinfo | grep "processor"| wc -l`
        if [ "x$phy_cpu" != "x" -a  "x$logic_cpu" != "x" ]
        then
        color_echo 34 "物理CPU核数:${phy_cpu};  逻辑CPU核数:${logic_cpu}."
        fi

        }


        #3.获取ip地址/主机名称
        function get_host_info()
        {

        echo_separator "服务器信息检查"
        ip_addr=`ifconfig | grep "inet"|grep -v "127.0.0.1"|awk -F: '{print $1}'|awk 'NR==1{print}'| awk '{print $2}'`
        hostname=`hostname`
        last_uptime=`who -b|awk '{print $3,$4}'`
        system_time=`date "+%Y-%m-%d %H:%M:%S"`
        os_ver=`cat /etc/redhat-release`
        color_echo 34  "主机名称:${hostname};  IP地址:${ip_addr}.  服务器最后一次重启时间:${last_uptime}. 服务器当前时间:${system_time} . 操作系统版本号: ${os_ver}.          "

        }


        #4.内存大小.
        function check_mem()
        {
        echo_separator "服务器内存间检查"
        MEM_THRESHOLD=80
        mem_total=$(free -m |grep Mem|awk '{print $2}')
        mem_used=$(free -m |grep Mem|awk '{print $3}')
        mem_rate=`awk 'BEGIN{printf "%.5f\n",('$mem_used'/'$mem_total')*100}'`

        mem_gt_threshold=`expr ${mem_rate}\>${MEM_THRESHOLD}`

        if [ ${mem_gt_threshold} == 1 ]
        then
        color_echo 31 "内存使用超过阈值.${MEM_THRESHOLD}"
        else
        color_echo 34 "内存共: ${mem_total}M; 使用了${mem_used}M;使用率:${mem_rate}%."
        fi
        }


        #5.密码过期检查
        function check_passwd {
        echo_separator "密码检查"
        pwdfile="$(cat /etc/passwd)"

        result=""
        for shell in $(grep -v "/sbin/nologin" /etc/shells);do
        for user in $(echo "$pwdfile" | grep "$shell" | cut -d: -f1);do
        get_expiry_date=$(/usr/bin/chage -l $user | grep 'Password expires' | cut -d: -f2)
        if [[ $get_expiry_date = ' never' || $get_expiry_date = 'never' ]];then
        color_echo 34 "永不过期   $user"
        result="$result,$user:never"
        else
        password_expiry_date=$(date -d "$get_expiry_date" "+%s")
        current_date=$(date "+%s")
        diff=$(($password_expiry_date-$current_date))
        let DAYS=$(($diff/(60*60*24)))
        expr_days=`expr $DAYS \* -1`
        #判断是否已经过期
        if [ "$expr_days" -gt "0" ]
        then
        color_echo 31  "$user   已过期$expr_days"
        else
        color_echo 31  "$user   $DAYS天后过期"
        fi
        result="$result,$user:$DAYS days"
        fi
        done
        done
        report_PasswordExpiry=$(echo $result | sed 's/^,//')
        echo_separator "密码检查策略"
        grep -v "#" /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE"

        }


        #检查服务是否启动正常
        function check_service()
        {
        ip_addr=`ifconfig | grep "inet"|grep -v "127.0.0.1"|awk -F: '{print $1}'|awk 'NR==1{print}'| awk '{print $2}'`
        pid=`ps -ef|grep $3|grep -v grep|awk '{print $2}' `
        OLD_IFS="$IFS"
        IFS=","
        arr=($1)

        IFS="$OLD_IFS"
        for ip in ${arr[@]}
        do
        if [ "${ip}" == "${ip_addr}" ]
        then
        echo_separator "$3 服务检查"
        if [ -z "${pid}" ]
        then
        color_echo 31 "$2 未启动."
        else
        color_echo 34 "$2 服务正常."
        fi
        fi
        done

        }

        #nginx服务检查
        function check_nginx()
        {
        check_service "$NGINX_IP_"  "nginx" "nginx"
        }


        #nacos服务检查
        function check_nacos()
        {
        check_service "$NACOS_IP_" "nacos" "nacos"
        }

        #mysql服务检查
        function check_mysql()
        {
        check_service "$MYSQL_IP_" "MYSQL" "mysql"
        }

        #mq服务检查
        function check_rabbitmq()
        {
        check_service "$RABBITMQ_IP_" "RABBITMQ" "rabbitmq"
        }

        #服务检查
        function check_mservice()
        {
        check_service "$MPLATFORM_IP_" "测试服务" "mservice"
        }


        get_host_info
        check_disk
        check_phy_cpu
        check_mem
        check_passwd
        check_nginx
        check_nacos
        check_mysql
        check_rabbitmq
        check_mservice

2. 前端部署脚本

包含从ftp拉取压缩包,并备份解压功能。

#!/bin/bash

PARAM_NUM=$#
zip_name=$1
DIST_REAL_NAME=$2
#BAK_TIME=$(date +%F%n%T)
BAK_TIME=$(date +%Y%d%m%H%M%S)
#前端目录所在路径
#CATALOG_PATH=/nginx/nginx/wwwlocal

function color_echo()
{
    printf "\e[%dm %s\e[0m \n" $1 "$2"
}

bakDistFile()
{
#首先判断参数是否正常.总共需要输入2个参数.
if [ $PARAM_NUM -ne "2" ];
then
    usage
    exit
 else
    test_prod
    ftp_get
    bakFile
fi
}

#首先判断输入名称是否正确
usage(){
 color_echo 34 "使用说明:该脚本有两个参数,第一个参数是上传的压缩包名如:dist.zip,第二个参数是实际服务名如:vue-service"
}

#$2在目录下是否存在,如果不存在重建一个即可,如果存在需要备份,并删除原有目录。
bakFile(){
  if [[ -d "$CATALOG_PATH/$DIST_REAL_NAME" ]]; then
     mv_unzip_file
  else
   color_echo 31 "请仔细检查确认,前端服务名称是否正确.如确认无误请输入y/Y,回车确认.否则输入n/N,退出."
     while true
   do
    read -r -p  " 请确认, [Y/n] " input

    case $input in
        [yY][eE][sS]|[yY])
                mv_unzip_file
               exit 1
        ;;
        [nN][oO]|[nN])
           color_echo 34 "No,确认后再次执行该脚本."
           exit 1           
           ;;
        *)
           color_echo 31 "Invalid input..."
           ;;
    esac
     done
  fi
}

mv_unzip_file()
{

   mv -f $zip_name $CATALOG_PATH
   cd $CATALOG_PATH
   #目录存在,拉取后先备份
   mv  $DIST_REAL_NAME "$DIST_REAL_NAME-$BAK_TIME.bak"
   #判断下压缩包类型
   if [ ${zip_name##*.} == "zip" ];then
     unzip  $zip_name  && mv `unzip -l $zip_name | awk '{if(NR == 4){ print $4}}'` $DIST_REAL_NAME 
   elif [ ${zip_name##*.} == "gz" ] || [ ${zip_name##*.} == "tgz" ];then
      mkdir ./$DIST_REAL_NAME && tar -xzvf $zip_name  -C ./$DIST_REAL_NAME  --strip-components 1
   else
     color_echo 31 "请确认上传ftp的压缩包类型,目前仅支持zip、gz.";      
   fi

}

test_prod()
{
ifconfig | grep "inet" | grep -v "inet6" |awk '{ print $2 }'| sed 's/addr://g'| grep -v "127.0.0.1" | head -1 |grep 192.168  >/dev/null

if [ $? == 0 ];then
        FADDR='215.12.116.19'
        FTPADDR='215.12.116.19 6000'
        FTPUSER='test test'
else
        FADDR='215.42.30.47'
        FTPADDR='215.42.30.47 6000'
        FTPUSER='test test@123'
fi
}


ftp_get()
{
ftp -n << EOF
 open ${FTPADDR}
 user ${FTPUSER}
 bin
 get ${zip_name}
 clos
 bye
EOF

}

bakDistFile

3.后端部署脚本

jar替换yml文件,启停功能。

#!/bin/bash
#jar包名称
APP_NAME=springboot-service.jar
BOOT_INF_PATH=BOOT-INF/classes
#检查程序是否在运行

usage(){
echo "sh start_mplatform.sh start 启动进程"
echo "sh start_mplatform.sh stop 杀掉进程"

}
is_exist(){
 pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
 #如果不存在返回1,存在返回0
 if [ -z "${pid}" ]; then
 return 1
 else
 return 0
 fi
}
#启动方法
start(){
 is_exist
 if [ $? -eq "0" ]; then
         echo "${APP_NAME} is already running. pid=${pid} ."
 else
    #获取到当前yml在jar包中的位置
 
    ymlBootPath=`jar tvf ${APP_NAME}|grep bootstrap.yml`
    # ${var%/*}:去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容.
    #解压指定路径下的文件   ${ymlPath##* }:## 号截取,删除左边字符,保留右边字符
    jar xvf ${APP_NAME} ${ymlBootPath##* }
    #复制yml到jar包里
    cp -arpf  resources/bootstrap.yml $BOOT_INF_PATH
    #把更新完毕的文件放回jar包中去
     jar uvf $APP_NAME ${ymlBootPath##* }
  
    echo "        The YML configuration file in jar package is replaced.start startup jar.           "
     rm -rf BOOT-INF
     nohup java -Xms1024m -Xmx2048m -XX:+PrintGCDetails  -XX:+PrintGCDateStamps -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m  -jar  $APP_NAME > /user/local/logs/springboot-out.log 2>&1 &        
  tail -f /user/local/logs/springboot-out.log
 fi
}


#停止方法
stop(){
 is_exist
 if [ $? -eq "0" ]; then
    echo "$APP_NAME 运行进程id: $pid"
     sudo  kill  -9  $pid
 else
 echo "${APP_NAME} stop success"
 fi
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
   "start")
    start
  ;;
   "stop")
    stop
 ;;
*)
 usage
 ;;
esac

5.新建用户脚本

#!/bin/bash
 
# 需要创建的用户名,示例:USER_NAME=myuser
USER_NAME=$1
# 创建用户所属的用户组,示例:USER_GROUP=mygroup
USER_GROUP=$2
# 用户密码,示例:USER_PASSWD=Cloud12#$
USER_PASSWD=$3
 
function color_echo()
{
    printf "\e[%dm %s\e[0m \n" $1 "$2"
}

# 校验参数
function check_param()
{
    if [[ ! -n "${USER_NAME}" ]] || [[ ! -n "${USER_GROUP}" ]] || [[ ! -n "${USER_PASSWD}" ]]; then
        color_echo 31 "ERROR: 该脚本需要三个参数,分别是:用户名、所属组、密码;且全不为空."
        exit 1;
    fi
}
 
# 创建用户
function creat_user()
{
    check_param
   echo "用户名:$USER_NAME;---所属组:$USER_GROUP; 密码:$USER_PASSWORD。"
    #create group
    grep "^${USER_GROUP}" /etc/group &> /dev/null
    if [ $? -ne 0 ]; then
        groupadd ${USER_GROUP}
    fi
    #create user
    id ${USER_NAME} &> /dev/null
    if [ $? -ne 0 ]; then
        useradd -g ${USER_GROUP} ${USER_NAME} -d /home/${USER_NAME}
        echo ${USER_PASSWD}| passwd ${USER_NAME} --stdin
        chage -M 99999 ${USER_NAME}
    fi
}

creat_user $*

相关文章

  • 几个常用的Linux监控脚本

    几个常用的Linux监控脚本 本文介绍了几个常用的Linux监控脚本,可以实现主机网卡流量、系统状况、主机磁盘空间...

  • linux常用脚本

    统计linux链接状态 ``` netstat -an | awk '/^tcp/ {++S[$NF]} END ...

  • Linux常用的脚本

    1.巡检脚本 巡检内容如下:磁盘空间、物理cpu核数,逻辑CPU核数、获取ip地址/主机名称、内存、密码过期检查、...

  • shell脚本学习资料

    1.Linux Shell脚本攻略(第2版)& 常用shell脚本指令[精辟]链接:https://pan.bai...

  • Module-Git使用手册

    Linux-Git使用手册.md GitHub插入MarkDown图片 Github常用脚本 使用脚本 命令大全 ...

  • Linux Shell:date日期时间操作

    摘要:Linux,Shell 整理Linux Shell脚本中常用的日期操作,给予date命令,主要用法总结 获得...

  • 测试开发笔记二(Linux与Shell脚本)

    01 | Linux系统和Shell环境准备 运行shell test.sh 运行脚本 02 | Linux常用命...

  • Linux操作系统命令汇总

    SHELL脚本学习笔记 标签(空格分隔): linux shell脚本 1. 常用命令汇总 alias 设置别名u...

  • 个人Shell工具集介绍

    简介 utils: shell工具集,通常用于Linux环境中,包含一些常用的alias、脚本、git命令自动补全...

  • linux常用shell脚本

    mysql备份并压缩脚本,只保存最近七天 https://www.runoob.com/linux/linux-s...

网友评论

      本文标题:Linux常用的脚本

      本文链接:https://www.haomeiwen.com/subject/aykbhltx.html