Shell脚本 定时删除文件的1/3防止日志文件过大,文件大小大于某个值时删除

该脚本用于每日2点15分自动执行,检查日志文件大小。如果文件超过5MB,它将删除文件的前1/3内容以控制大小。否则,当文件大小在限制内时,脚本不做处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/sh
 
# -----------------------------------------------------
# 定时 每日2点15分 执行
# -----------------------------------------------------

echo "---------定时删除文件的1/3防止日志文件过大---------"
filePath="/data/日志文件名.log"
# fileRows=`wc -l "${filePath}"`
fileRows=`awk 'END {print NR}' "${filePath}"`
echo "删除前总行数:"$fileRows
delEnd=$(($fileRows/3))
echo "即将删除行数:"$delEnd
# 删除文件内容,使用双引号变量直接引用
sed -i "1,${delEnd}d" "${filePath}"
fileRows=`awk 'END {print NR}' "${filePath}"`
echo "删除后总行数:"$fileRows

进阶:文件大小大于某个值时删除

#!/bin/sh
 
# --------------------------------------------------------
# 定时 每日2点15分 执行
# --------------------------------------------------------

echo "---------定时删除文件的1/3防止日志文件过大---------"
filePath="/data/日志文件名.log"

filesize=`ls -l $filePath | awk '{ print $5 }'`
# 1024*1000=1M,下面最大size为5M
maxsize=$((1024*1000*5))
echo "删除前Bytes:"$filesize

if [ $filesize -gt $maxsize ]
then
    echo "$filesize > $maxsize"
    # fileRows=`wc -l "${filePath}"`
    fileRows=`awk 'END {print NR}' "${filePath}"`
    echo "删除前总行数:"$fileRows

    delEnd=$(($fileRows/3))
    echo "即将删除行数:"$delEnd
# 删除文件内容,使用双引号变量直接引用
    sed -i "1,${delEnd}d" "${filePath}"

    fileRows=`awk 'END {print NR}' "${filePath}"`
    echo "删除后总行数:"$fileRows
    filesize=`ls -l $filePath | awk '{ print $5 }'`
    echo "删除后Bytes:"$filesize
else 
    echo "$filesize < $maxsize"
fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值