运维常用的shell脚本源码

Shell脚本是系统运维工作当中最重要的一部分之一,能够通过编写Shell脚本来自动化执行系统管理任务,提高工作效率,减少出错概率。在这篇文章中,我将介绍运维常用的Shell脚本源码。

1. 自动清理日志文件

#!/bin/bash

find /path/to/logs -type f -mtime +7 -name "*.log" -exec rm {} \;
 

这个脚本可以定期清理指定目录下7天前的所有日志文件,以防止磁盘空间被占满。

2. 自动备份数据

#!/bin/bash

mysqldump -u root -pPASSWORD --all-databases > /path/to/backup/all-databases.sql

这个脚本可以自动备份MySQL数据库的所有表到指定路径。

3. 添加用户

#!/bin/bash

USERNAME="newuser"
PASSWORD=$(openssl rand -base64 12)

useradd $USERNAME -m -s /bin/bash
echo "$USERNAME:$PASSWORD" | chpasswd

这个脚本可以添加一个新用户并随机生成密码。

4. 部署应用程序

#!/bin/bash

APPLICATION_NAME="myapp"
VERSION="1.0.0"

cd /path/to/source/$APPLICATION_NAME
git fetch origin $VERSION
git checkout $VERSION
mvn clean package

cd /path/to/deploy/$APPLICATION_NAME
rm -rf *
cp /path/to/source/$APPLICATION_NAME/target/*.jar .
java -jar *.jar

这个脚本可以部署一个Java应用程序。它会从Git仓库中拉取指定版本的代码,并使用Maven构建该应用程序。然后将编译后的Jar包复制到指定目录并启动。

5. 定时检查系统资源

#!/bin/bash

ALERT_CPU=90
ALERT_MEMORY=80

while true; do
    CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%\n", $(NF-2)}')
    MEMORY=$(free | awk '/Mem/{printf "%.2f%%\n", $3/$2*100}')

    if (( $(echo "$CPU >= $ALERT_CPU" |bc -l) )); then
        echo "CPU usage is too high: $CPU" | mail -s "Alert from Server" [email protected]
    fi

    if (( $(echo "$MEMORY >= $ALERT_MEMORY" |bc -l) )); then
        echo "Memory usage is too high: $MEMORY" | mail -s "Alert from Server" [email protected]
    fi

    sleep 60
done

这个脚本可以定期检查系统的CPU和内存使用情况,并在达到预警值时通过邮件发送通知给管理员。

6. 自动更新操作系统

#!/bin/bash

apt-get update
apt-get upgrade -y

这个脚本可以自动更新Ubuntu操作系统的所有软件包。

7. 自动重启服务

#!/bin/bash

SERVICE_NAME="myservice"

if systemctl is-active --quiet $SERVICE_NAME; then
    systemctl restart $SERVICE_NAME
fi

这个脚本可以检查指定的服务是否在运行,如果是则重启该服务。

8. 监控日志文件

#!/bin/bash

LOG_FILE="/path/to/log/file.log"
KEYWORD="error"

tail -f $LOG_FILE | while read LINE; do
    if echo $LINE | grep $KEYWORD; then
        echo "Found keyword '$KEYWORD' in log file at $(date)" | mail -s "Alert from Server" [email protected]
    fi
done

这个脚本可以实时监控一个日志文件,并在文件中出现指定关键字时通过邮件发送通知给管理员。

9.磁盘监控

磁盘空间监控脚本可用于检查服务器磁盘空间是否已满或接近饱和状态,并在达到警戒线时发送告警邮件或其他通知。

#!/bin/bash

# 设置告警阈值
threshold=90

# 获取当前磁盘使用率
disk_usage=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

# 判断是否需要发送告警邮件
if [ "$disk_usage" -ge "$threshold" ]; then
  echo "磁盘使用率已超过$threshold%,请及时清理!" | mail -s "磁盘空间告警" [email protected]
fi

解释:

  • #!/bin/bash:指定脚本执行的解释器为bash。
  • threshold=90:设置磁盘使用率的告警阈值为90%。
  • disk_usage=df -h / | awk 'NR==2 {print $5}' | sed 's/%//'``:使用df命令获取当前磁盘使用情况,再用awksed提取出使用率,并去除百分号。
  • if [ "$disk_usage" -ge "$threshold" ]; then:如果磁盘使用率超过了告警阈值,则执行下一步操作。
  • echo "磁盘使用率已超过$threshold%,请及时清理!" | mail -s "磁盘空间告警" [email protected]:向指定的用户邮箱发送告警邮件。

10. 网络监控脚本

以下是一个简单的网络监控shell脚本:

#!/bin/bash

# 设置网络检测地址
url="https://www.example.com/"

# 执行网络请求并获取状态码
status_code=$(curl -o /dev/null --silent --head --write-out '%{http_code}\n' "$url")

# 判断状态码是否为200 OK
if [ "$status_code" -ne "200" ]; then
  echo "网络异常,请检查网络连接!"
fi

解释:

  • #!/bin/bash:指定脚本执行的解释器为bash。
  • url="https://www.example.com/":设置需要检测的网络地址,这里以示例网站为例。
  • status_code=$(curl -o /dev/null --silent --head --write-out '%{http_code}\n' "$url"):使用curl命令向指定地址发送请求,并将响应状态码赋值给status_code变量。
  • if [ "$status_code" -ne "200" ]; then:如果状态码不为200,则执行下一步操作。
  • echo "网络异常,请检查网络连接!":输出网络异常的提示信息。

可以将该脚本设置为定时任务,每隔一定时间执行一次,以实现网络连接的自动监测和告警。

11.安全审计脚本

#!/bin/bash

# 获取当前登录用户数量
user_count=$(who | wc -l)

# 获取最近10分钟成功登录的IP地址列表
ip_list=$(grep "Accepted password" /var/log/auth.log | grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | sort | uniq)

# 输出统计结果
echo "当前登录用户数量:$user_count"
echo "最近10分钟成功登录的IP地址列表:"
echo "$ip_list"
 

解释:

  • #!/bin/bash:指定脚本执行的解释器为bash。
  • user_count=$(who | wc -l):使用who命令获取当前登录用户列表,并用wc命令统计行数,赋值给user_count变量。
  • ip_list=$(grep "Accepted password" /var/log/auth.log | grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | sort | uniq):在/var/log/auth.log文件中查找最近10分钟内成功登录的记录,提取出IP地址列表,并去重排序,赋值给ip_list变量。
  • echo "当前登录用户数量:$user_count":输出当前登录用户数量的统计结果。
  • echo "最近10分钟成功登录的IP地址列表:":输出最近10分钟内成功登录的IP地址列表的提示信息。
  • echo "$ip_list":输出IP地址列表。

可以将该脚本设置为定时任务,每隔一定时间执行一次,以实现安全审计的自动检测和告警。

猜你喜欢

转载自blog.csdn.net/qq_52497256/article/details/130387656