自动化运维脚本集合

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 自动化运维脚本集合

使用说明

备份指定目录

# 备份指定目录文件到指定目录,备份文件名称为:备份目录最后一层目录+"_"+日期.tar.gz
# 第一个参数:backdir 第二参数:备份文件保存目录 第三个参数:备份目录/文件
sh script.sh backdir /root/ /home

查看CPU、磁盘、内存使用率

sh script.sh baseinfo

返回结果

2023-04-03 13:08:44 CPU usage: 0.0, Memory usage: 9.39%, Disk usage: 19%

关闭防火墙

sh script.sh stopFirewall

开启防火墙

sh script.sh startFirewall

显示基础信息-详细

sh script.sh info

查看进程pid,启动时间,持续执行时间

sh script.sh pstime 进程名/id

根据进程id查看工作目录

sh script.sh psdir 15008

清除Linux系统占用缓存

sh script.sh dropCache

查看端口是否使用

# 第一个参数脚本名称 ,第二个参数ip,第三个参数端口
sh scripte.sh ping-port

demo:

sh scripte.sh ping-port
> 端口 80 无法访问 127.0.0.1

查看进程使用的端口

sh scripte.sh processor-port 进程信息

demo

sh 1.sh processor-port 15008
-------------------------------------------------
所有进程ID:14746 14749 15008
-------------------------------------------------
进程ID:14746
进程 15008 没有占用任何端口。
-------------------------------------------------
进程ID:14749
进程 15008 没有占用任何端口。
-------------------------------------------------
进程ID:15008
进程 15008 占用的端口号:1234
12345
16798
25333
50052
5678
-------------------------------------------------

查看端口所在进程

sh scripte.sh processor-port 5678

demo

sh scripte.sh processor-port 5678
> 端口  对应的进程是 java,PID 是 15008。

查看目录下各目录占用空间以及最大文件或目录

 sh script.sh duh /var/lib

demo

# sh 1.sh duh /var/lib
28K     /var/lib/polkit-1
76K     /var/lib/systemd
692K    /var/lib/cloud
13M     /var/lib/yum
132M    /var/lib/rpm
25G     /var/lib
25G     /var/lib/clickhouse
占用存储空间最大的目录是:
25G     /var/lib/clickhouse

查看内存使用前十的进程

sh script.sh top-mem

查看CPU使用前十的进程

sh script.sh top-cpu

脚本内容

#!/bin/bash

# 备份指定目录文件到指定目录,备份文件名称为:备份目录最后一层目录+"_"+日期.tar.gz
# 第一个参数:backdir 第二参数:备份文件保存目录 第三个参数:备份目录/文件
backdir(){
    # 备份文件保存目录
    BACKUP_DIR=`echo $2`

    # 备份目录
    SOURCE_DIR=`echo $3`
    FILE_NAME=`basename "$SOURCE_DIR"`
    # 备份文件名称
    BACKUP_FILE=$FILE_NAME\_$(date +%Y%m%d).tar.gz
    #如果备份文件保存目录不存在则创建
    if [ ! -d "$BACKUP_DIR" ]; then
      mkdir -p $BACKUP_DIR
    fi
    # 创建备份文件
    tar -zcvPf $BACKUP_DIR/$BACKUP_FILE $SOURCE_DIR
}

# 内存,cpu,磁盘使用
baseinfo(){

    # CPU usage
    CPU_USAGE=$(top -b -n 1 | grep "^%Cpu" | awk '{print $2}')

    # Memory usage
    MEM_USAGE=$(free | awk 'NR==2{printf "%.2f%%", $3/$2*100}')

    # Disk usage
    DISK_USAGE=$(df -h / | awk 'NR==2{print $5}')

    # Write results to log file
    echo "$(date +"%Y-%m-%d %H:%M:%S") CPU usage: $CPU_USAGE, Memory usage: $MEM_USAGE, Disk usage: $DISK_USAGE" 
}

# 开启防火墙
startFirewall(){
              # 获取 Linux 系统版本
        OS=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
          # 根据系统版本执行相应的命令启动防火墙
        if [[ $OS == *"CentOS"* || $OS == *"Red Hat"* ]]; then
            systemctl start firewalld
            systemctl enable firewalld
            systemctl start iptables
            systemctl enable iptables
            systemctl status iptables
            systemctl status firewalld
            echo "Firewall has been started and enabled successfully."
        elif [[ $OS == *"Ubuntu"* || $OS == *"Debian"* ]]; then
            ufw enable
            echo "Firewall has been enabled successfully."
        else
            echo "Unsupported operating system."
            exit 1
        fi
}
#关闭防火墙
stopFirewall(){
        # 获取 Linux 系统版本
        OS=$(awk -F= '/^NAME/{print $2}' /etc/os-release)

        # 根据系统版本执行相应的命令关闭防火墙
        if [[ $OS == *"CentOS"* || $OS == *"Red Hat"* ]]; then
            systemctl stop firewalld
            systemctl disable firewalld
            systemctl stop iptables
            systemctl disable iptables
            systemctl status iptables
            systemctl status firewalld
            echo "Firewall has been stopped and disabled successfully."
        elif [[ $OS == *"Ubuntu"* || $OS == *"Debian"* ]]; then
            ufw disable
            echo "Firewall has been disabled successfully."
        else
            echo "Unsupported operating system."
            exit 1
        fi
}

# 查看进程pid,启动时间,持续执行时间
pstime(){
  ps -eo pid,lstart,etime,cmd | grep $2
}

# 根据进程ID查看进程工作目录
psdir(){
  ls -l /proc/$2/cwd 
}

# 释放缓存
dropCache(){
    sync
    echo 3 > /proc/sys/vm/drop_caches
}

# 第二个参数ip,第三个参数端口
pingPort(){
        # 定义IP地址和端口
        IP_ADDRESS=`echo $2`
        PORT=`echo $3`

        # 检查nc命令是否已经安装,如果未安装,则尝试安装
        if ! command -v nc &> /dev/null; then
            if command -v apt-get &> /dev/null; then
                sudo apt-get update && sudo apt-get -y install netcat
            elif command -v yum &> /dev/null; then
                sudo yum install -y nc
            else
                echo "无法自动安装nc命令,请手动安装后重试。"
                exit 1
            fi
        fi

        # 使用nc命令检查IP地址和端口是否可用
        if nc -z -w 2 $IP_ADDRESS $PORT; then
            echo "端口 $PORT 可以访问 $IP_ADDRESS"
        else
            echo "端口 $PORT 无法访问 $IP_ADDRESS"
        fi
}

# 查看进程使用的端口号
# 第二个参数出入安需要查询的进程,可以为pid,也可以为进程名称
catProcessorPort(){
                echo "-------------------------------------------------"
        PROCESS_NAME=`echo $2`

        # 使用pidof命令查找进程ID
        PID=$(pidof $PROCESS_NAME)

        # 如果找不到进程ID,则使用ps命令查找
        if [ -z "$PID" ]; then
            PID=$(ps -ef | grep $PROCESS_NAME | grep -v grep | awk '{print $2}')
        fi
        echo 所有进程ID:$PID
        # 如果还是找不到进程ID,则输出错误信息并退出
        if [ -z "$PID" ]; then
            echo "找不到进程 $PROCESS_NAME。"
            exit 1
        fi

        for PID2 in $PID; do
                echo "-------------------------------------------------"
            echo 进程ID:$PID2
            # 使用lsof命令查找进程占用的端口号
            PORTS=$(lsof -nP -p $PID2 | grep LISTEN | awk '{print $9}' | cut -d':' -f2 | sort -u)

            # 输出占用端口号
            if [ -n "$PORTS" ]; then
                echo "进程 $PROCESS_NAME 占用的端口号:$PORTS"
            else
                echo "进程 $PROCESS_NAME 没有占用任何端口。"
            fi
        done
        echo "-------------------------------------------------"

}

# 查看使用端口的进程pid
# 第二个参数为端口号
catPortProcessor(){
        catPortProcessorPort=`echo $2`
    # 使用 lsof 命令查询端口号对应的进程
    pid=$(sudo lsof -t -i:$catPortProcessorPort)

    # 如果找到了进程,打印进程名称和 PID
    if [ ! -z "$pid" ]; then
      process_name=$(ps -p $pid -o comm=)
      echo "端口 $port 对应的进程是 $process_name,PID 是 $pid。"
    else
      echo "端口 $port 没有被占用。"
    fi
}

# 查看哪个目录占用磁盘空间大
# 第二个参数为:需要查看的目录
duh(){
        directory=`echo $2`

    # 遍历目录并计算大小
    du -h -d 1 $directory | sort -h

    # 输出占用存储空间最大的目录
    echo "占用存储空间最大的目录或文件是:"
    du -sh $directory/* | sort -hr | head -n 1
}

# 使用内存最多的前十个进程
topMem(){
        echo "下面是 内存 占用率最高的前 10 个进程:"
        echos
        echo "进程ID 内存使用大小 启动命令"
        ps aux --sort=-%mem | head -n 11 | tail -n 10 | awk '{print $2,$6/1024"M",$11}'
        echos
}

# 使用CPU最多的前十个进程
topCpu(){
        echo "下面是 CPU 占用率最高的前 10 个进程:"
        echos
        echo "进程ID cpu占用率 启动命令"
    ps aux --sort=-%cpu | head -n 11 | tail -n 10 | awk '{print $2,$3,$11}'
    echos
}

# 查看有多少远程的 IP 在连接本机(不管是通过 ssh 还是 web 还是 ftp 都统计) 
# 使用 netstat ‐atn 可以查看本机所有连接的状态,‐a 查看所有,
# -t仅显示 tcp 连接的信息,‐n 数字格式显示
# Local Address(第四列是本机的 IP 和端口信息)
# Foreign Address(第五列是远程主机的 IP 和端口信息)
# 使用 awk 命令仅显示第 5 列数据,再显示第 1 列 IP 地址的信息
# sort 可以按数字大小排序,最后使用 uniq 将多余重复的删除,并统计重复的次数
connectIp(){
        echo "连接数量 来源IP端口"
        # 第一列是连接数量,第二列是连接ip:port
        netstat -atn  |  awk  '{print $5}'  | awk  '{print $1}' | sort -nr  |  uniq -c
}

# 查看网卡流量
iftop(){
   sudo yum -y install iftop
   echo "请手动输入命令查看流量:iftop -P"
}

# 显示系统基础信息
info(){
    # 获取系统 CPU 数量
    cpu_logical_count=$(nproc)
    cpu_physical_count=$(grep "physical id" /proc/cpuinfo | sort -u | wc -l)

    # 获取系统内存总容量、已使用内存量和可用内存量
    mem_total=$(grep MemTotal /proc/meminfo | awk '{print $2}')
    mem_used=$(free -m | awk 'NR==2{print $3}')
    mem_available=$(free -m | awk 'NR==2{print $4}')

    # 获取系统磁盘总容量、已使用磁盘空间和可用磁盘空间
    disk_total=$(df -BG --total | awk 'END{print $2}')
    disk_used=$(df -BG --total | awk 'END{print $3}')
    disk_available=$(df -BG --total | awk 'END{print $4}')

    # 获取系统 CPU 使用率
    cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}')

    # 将容量单位转换为 GB
    #disk_total=$(echo "scale=2;$disk_total/1024" | bc)
    #disk_used=$(echo "scale=2;$disk_used/1024" | bc)

    # 显示基础监控信息
    echo "系统 CPU 数量(逻辑处理器数量):$cpu_logical_count"
    echo "系统 CPU 数量(物理处理器数量):$cpu_physical_count"
    echo "系统内存总容量:$((mem_total / 1024)) MB"
    echo "系统已使用内存量:$mem_used MB"
    echo "系统可用内存量:$mem_available MB"
    echo "系统磁盘总容量:$disk_total GB"
    echo "系统已使用磁盘空间:$disk_used GB"
    echo "系统可用磁盘空间:$disk_available GB"
    echo "系统 CPU 使用率:$cpu_usage"
}

echos(){
    echo "-------------------------------------------------"
}

case "$1" in
              'backdir')
          backdir $*
                ;;
        'baseinfo')
          baseinfo
                ;;
        'stopFirewall')
                    stopFirewall
                ;;
        'startFirewall')
          startFirewall
                ;;
        'pstime')
          pstime $*
                ;;
        'psdir')
        psdir $*
        ;;
         'dropCache')
        dropCache
        ;;
         'ping-port')
        pingPort $*
        ;;
         'processor-port')
        catProcessorPort $*
        ;;
         'port-processor')
        catPortProcessor $*
        ;;
         'duh')
        duh $*
        ;;
          'top-mem')
        topMem 
        ;;
          'top-cpu')
        topCpu 
        ;;
          'connect-ip')
        connectIp
        ;;
         'iftop')
        iftop
        ;;
         'info')
        info
        ;;
        *)
          echo -e "需要传入指定参数,可用参数:\n\tbackdir:第一个参数:backdir 第二参数:备份文件保存目录 第三个参数:备份目录/文件\n\tbaseinfo:查看CPU、磁盘、内存使用率\n\tstopFirewall:关闭防火墙\n\tstartFirewall:开启防火墙\n\tpstime:查看进程pid,启动时间,持续执行时间。第一个参数:pstime,第二个参数:进程名/进程id\n\tpsdir:查看进程工作目录\n\tdropCache:清除Linux系统占用缓存\n\tping-port:查看端口是否使用\n\tprocessor-port:查看进程使用端口\n\tport-processor:查看端口被哪个进程使用\n\tduh:查看目录下各目录占用空间以及最大文件或目录.第一个参数:duh,第二个参数:需要统计的目录\n\ttop-mem:查看内存使用前十的进程\n\ttop-cpu:查看CPU使用前十的进程"
                exit 1
esac

一键下载应用

下载安装到环境变量

sudo curl -L http://linux.hadoop.wiki/jastool.sh -o /usr/bin/jastool && sudo chmod +x /usr/bin/jastool

使用方法

jastool info

目录
相关文章
|
26天前
|
Linux 持续交付 调度
HTTPS 证书自动化运维:https证书管理系统-自动化部署
本指南介绍如何部署Linux服务器节点。首先复制生成的Linux脚本命令,然后将其粘贴到目标服务器上运行。接着刷新页面查看节点记录,并点击“配置证书”选择证书以自动部署。最后,节点部署完成,后续将自动调度,无需人工干预。
HTTPS 证书自动化运维:https证书管理系统-自动化部署
|
26天前
|
监控 运维
HTTPS 证书自动化运维:https证书管理系统- 自动化监控
本文介绍如何设置和查看域名或证书监控。步骤1:根据证书状态选择新增域名或证书监控,线上部署推荐域名监控,未部署选择证书监控。步骤2:查询监控记录详情。步骤3:在详情页查看每日定时检测结果或手动测试。
HTTPS 证书自动化运维:https证书管理系统- 自动化监控
|
26天前
|
运维
HTTPS 证书自动化运维:https证书管理系统之自动化签发
通过访问【https://www.lingyanspace.com】注册账户,进入证书服务菜单并新增证书。填写域名(单域名、多域名或泛域名),创建订单后添加云解析DNS记录进行质检。确认完成后可下载证书,并支持后续查看、更新和定时更新功能。证书过期前15天自动更新,需配置邮箱接收通知。
HTTPS 证书自动化运维:https证书管理系统之自动化签发
|
29天前
|
机器学习/深度学习 人工智能 运维
基于AI的自动化事件响应:智慧运维新时代
基于AI的自动化事件响应:智慧运维新时代
103 11
|
30天前
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
139 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
|
1月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
75 9
|
1月前
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
1月前
|
人工智能 运维 监控
AI辅助的运维流程自动化:实现智能化管理的新篇章
AI辅助的运维流程自动化:实现智能化管理的新篇章
522 22
|
2月前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
212 61
|
2月前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。