Shell自动化日志维护脚本

  • A+
所属分类:Linux
Shell自动化日志维护脚本

简介:

系统日志对于了解操作系统的运行状况、故障排除和性能分析至关重要。然而,长期积累的日志文件可能变得庞大,影响系统性能。在这篇文章中,我们将介绍一个自动化的解决方案,使用 Bash 脚本来监控和维护系统日志文件,以确保它们的大小合理,避免磁盘爆满,并保持内容的整洁和高效。

问题背景:

在使用ELK日志收集海量日志时,服务器系统里日志文件会随着时间变的越来越大,如果不定时清理旧数据,长期下去会导致磁盘爆满影响系统运行。

脚本原理:

使用Bash 脚本遍历循环检查日志文件夹里所有文件大小,超过设定阈值就自动清空。

定时任务调度:

使用 crontab 定时任务,将脚本定期执行,确保日志维护持续进行。

crontab -e
0 0 * * * /usr/local/scripts/monitor_log.sh
crontab -e 0 0 * * * /usr/local/scripts/monitor_log.sh
crontab -e
0 0 * * * /usr/local/scripts/monitor_log.sh

注意事项: 该脚本执行时间不可以低于日志文件大小最小值,间隔尽可能长,例如每隔一天执行一次。

脚本如下

#!/bin/bash
# 指定要监视日志的文件夹
watch_folder="/var/log/zccpe"
# 阈值文件大小(400M)
threshold_size=$((400*1024*1024)) # 400M in bytes
while true; do
all_files_small=true # 假设所有文件都小于阈值
# 获取文件夹下所有文件
files=("$watch_folder"/*)
for file_to_watch in "${files[@]}"; do
if [ -f "$file_to_watch" ]; then
# 获取文件大小(以字节为单位)
file_size=$(wc -c < "$file_to_watch")
if [ "$file_size" -ge "$threshold_size" ]; then
# 当文件大小达到或超过阈值时,删除前1天的行
sed -i '1,691200d' "$file_to_watch"
all_files_small=false # 设置标志为false,表示至少有一个文件还大于阈值
fi
fi
done
if $all_files_small; then
# 如果所有文件都小于阈值,退出循环
break
fi
# 休眠一段时间再次检查(例如,每小时检查一次)
#sleep 3600 # 3600秒 = 1小时
done
#!/bin/bash # 指定要监视日志的文件夹 watch_folder="/var/log/zccpe" # 阈值文件大小(400M) threshold_size=$((400*1024*1024)) # 400M in bytes while true; do all_files_small=true # 假设所有文件都小于阈值 # 获取文件夹下所有文件 files=("$watch_folder"/*) for file_to_watch in "${files[@]}"; do if [ -f "$file_to_watch" ]; then # 获取文件大小(以字节为单位) file_size=$(wc -c < "$file_to_watch") if [ "$file_size" -ge "$threshold_size" ]; then # 当文件大小达到或超过阈值时,删除前1天的行 sed -i '1,691200d' "$file_to_watch" all_files_small=false # 设置标志为false,表示至少有一个文件还大于阈值 fi fi done if $all_files_small; then # 如果所有文件都小于阈值,退出循环 break fi # 休眠一段时间再次检查(例如,每小时检查一次) #sleep 3600 # 3600秒 = 1小时 done
#!/bin/bash

# 指定要监视日志的文件夹
watch_folder="/var/log/zccpe"

# 阈值文件大小(400M)
threshold_size=$((400*1024*1024)) # 400M in bytes

while true; do
    all_files_small=true  # 假设所有文件都小于阈值

    # 获取文件夹下所有文件
    files=("$watch_folder"/*)

    for file_to_watch in "${files[@]}"; do
        if [ -f "$file_to_watch" ]; then
            # 获取文件大小(以字节为单位)
            file_size=$(wc -c < "$file_to_watch")

            if [ "$file_size" -ge "$threshold_size" ]; then
                # 当文件大小达到或超过阈值时,删除前1天的行
                sed -i '1,691200d' "$file_to_watch"
                all_files_small=false  # 设置标志为false,表示至少有一个文件还大于阈值
            fi
        fi
    done

    if $all_files_small; then
        # 如果所有文件都小于阈值,退出循环
        break
    fi

    # 休眠一段时间再次检查(例如,每小时检查一次)
    #sleep 3600 # 3600秒 = 1小时
done
  • 微信公众号
  • 扫一扫关注微信公众号
  • weinxin
  • 运维交流群
  • 扫一扫二维码加入群聊
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

滑动解锁才能提交