自动化日志清理方法

方法一:(auto_clean_log.sh)

清理两天前所有日志,这种方法会存在日志清理后可能存在空间未释放情况,解释请看文末。

find ./ -mtime +2 -name "*.log" -exec rm -r {} \;

注:
-mtime:按天查找,也可以是 -mmin:按分钟查找;
+2:查找2天前的文件,当前时间为0;
-exec:固定写法;
rm -rf:强制删除文件,包括目录;
{} \;:固定写法,一对大括号+空格+\+;

方法二:

1.清理脚本, 磁盘占用超过80%自动清理(auto_clean_log.sh)

#!/bin/bash

maxUsed=$(df -h|awk 'NR==2 {print $5}'|sed 's/%$//')
threshold=80
if [ "$maxUsed" -gt "$threshold" ];then
    find /data/log/* -name "*.log*"| xargs -I file sh -c 'echo true > file'
    find /usr/local/services/xxxx/bin/log/* -mmin +300 -name "*.log*" | xargs -I file sh -c 'echo true > file'
    echo true > /usr/local/xxx/log/rabbit@localhost.log
    echo "`date` clean work done."
    reboot
else
    echo "`date` current maxUsed is: $maxUsed %"
fi

定时任务执行(有需要可添加):

对于上面两种方法,读者可根据自身需要选取,通过crontab -e 打开crontab添加定时任务,30分钟检查一次磁盘占用率,满足两天前日志条件或者脚本中磁盘占用率大于80%进行自动清理:

*/30 * * * * /root/auto_clean_log/auto_clean_log.sh >> /root/auto_clean_log/crontab.log 2>&1 &

注:crontab参数介绍

30  10    *    *    *    /root/auto_clean_log_normal/auto_clean_log_normal.sh &
-    -    -    -    -    ------------------------------------------------------
|    |    |    |    |                                        ||
|    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)     +---------执行脚本所在绝对路径
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

关于日志文件删除磁盘空间未释放问题的思考:

知识点:

linux是通过 link 的数量来控制文件删除,只有当一个文件不存在任何 link 的时候,这个文件才会被删除。

每个文件都有 2 个 link 计数器 —— i_count 和 i_nlink。i_count 的意义是当前使用者的数量,i_nlink 的意义是介质连接的数量;或者可以理解为 i_count 是内存引用计数器,i_nlink 是硬盘引用计数器。再换句话说,当文件被某个进程引用时,i_count 就会增加;当创建文件的硬连接的时候,i_nlink 就会增加。

对于 rm 而言,就是减少 i_nlink。

那么问题来了,如果一个文件正在被某个进程调用,而用户却执行 rm 操作把文件删除了,这会出现什么结果呢?

当用户执行 rm 操作后,ls 或者其他文件管理命令不再能够找到这个文件,但是进程却依然在继续正常执行,依然能够从文件中正确的读取内容。这是因为,rm 操作只是将 i_nlink 置为 0 了;由于文件被进程引用的缘故,i_count 不为 0,所以系统没有真正删除这个文件。i_nlink 是文件删除的充分条件,而 i_count 才是文件删除的必要条件。

如果是持续写入日志的而且想清空日志等情况,可以使用Linux下清空或删除大文件内容的 5 种方法中的命令清空该文件,无需暴力的结束进程(即方法3.1的设计思路),如果此方法无效时再考虑结束进程(即方法3.2的设计思路)。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值