温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样写日志清理Shell脚本

发布时间:2026-11-08 20:06:32 来源:亿速云 阅读:99 作者:小樊 栏目:系统运维

下面给你一个实用、可复用的日志清理 Shell 脚本示例,并解释关键点和注意事项,你可以直接改成自己的环境。


一、基本思路

日志清理脚本一般做这几件事:

  1. 指定日志目录
  2. 按时间清理(如 7 天前)
  3. 可选:按大小清理
  4. 写清理日志(方便排查)
  5. 加定时任务(crontab)

二、最简单的日志清理脚本

#!/bin/bash

# 日志目录
LOG_DIR="/var/log/myapp"

# 保留天数
KEEP_DAYS=7

# 清理日志文件
find "$LOG_DIR" -type f -name "*.log" -mtime +$KEEP_DAYS -exec rm -f {} \;

echo "$(date '+%F %T') 日志清理完成" >> /var/log/clean_log.log

说明

  • -mtime +7:修改时间超过 7 天
  • *.log:只清理日志文件
  • rm -f:强制删除

三、更安全的写法(先压缩再删)

#!/bin/bash

LOG_DIR="/var/log/myapp"
KEEP_DAYS=7

# 先压缩旧日志
find "$LOG_DIR" -type f -name "*.log" -mtime +1 ! -name "*.gz" -exec gzip {} \;

# 删除 7 天前的压缩日志
find "$LOG_DIR" -type f -name "*.log.gz" -mtime +$KEEP_DAYS -exec rm -f {} \;

✅ 优点:

  • 不会立刻丢数据
  • 出问题时可恢复

四、按大小清理(防止磁盘爆)

# 删除大于 500M 的日志
find "$LOG_DIR" -type f -name "*.log" -size +500M -exec rm -f {} \;

五、推荐:使用 logrotate(生产环境)

如果是 Linux 服务器,强烈建议用 logrotate 而不是自己写脚本。

示例 /etc/logrotate.d/myapp:

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

✅ 自动轮转
✅ 不易写错
✅ 系统级支持


六、加定时任务(crontab)

crontab -e

每天凌晨 1 点执行:

0 1 * * * /opt/scripts/clean_log.sh

七、写脚本的注意事项

⚠️ 一定要:

  • 先 echo 测试,不要直接 rm
  • 路径用变量,避免误删
  • 生产环境优先 logrotate

如果你告诉我:

  • 日志路径
  • 操作系统(CentOS / Ubuntu)
  • 是否用 Docker

我可以帮你定制一个可直接用的脚本。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手