linux定时删除或者压缩日志文件

本文介绍了一种使用Shell脚本来自动清理和压缩日志文件的方法,通过设置crontab定时任务,实现定期删除旧日志并压缩指定日期的日志,以节省磁盘空间。

前言:

很多时候日志文件很大,需要一个自动清理或者压缩的执行脚本!

使用命令df -h可以查看磁盘使用情况:

然后使用du -sh * 可以查看所有文件或者文件夹的大小。

 

一、首先是shell脚本:

#!/bin/bash
# filename:delete-log.sh
# crontab 每天2点定时删除指定日期的日志,压缩指定日期的日志
# crontab: 0 2 * * * sh /data/logs/zip-delete-log.sh >> /dev/null 2>&1
# 如今天是2020-09-11,删除10天前数据,就是删除2020-09-01的数据
# 压缩3天前数据,就是删除2020-09-08的数据


#1.delete log
deleteday=`date -d '-10 day' +%Y-%m-%d`;
cd /data/logs/
rm -rf *${deleteday}*
echo "rm -rf *${deleteday}*"
 
#2.zip log
yesterday=`date -d '-3 day' +%Y-%m-%d`;
for file in $(ls *${yesterday}*)
do
 zip -rym ${file}.zip ${file}
 echo "zip -rym ${file}.zip ${file}"
done

二、然后是脚本的执行:

1.可以放在任意目录,但放在/data/logs目录下更方便
2.放到目录之后,chmod 755 zip-delete-log.sh
3.检查有没有zip和unzip命令,没有则安装:yum install zip unzip
4.创建linux定时任务crontab:
    查看定时任务:crontab -l
    创建定时任务:crontab -e
        # crontab 每天2点定时删除指定日期和压缩指定日期的数据
        0 2 * * * sh /data/logs/zip-delete-log.sh >> /dev/null 2>&1

 5.重载定时配置:service crond reload 

    或 重启定时服务:service crond restart
    

<think>根据用户问题描述,用户希望了解在Linux系统中使用shell脚本定时删除历史日志文件的方法。结合参考引用的内容,我将整理一个详细的解决方案。 解决方案通常包括两个核心部分: 1. 编写用于删除历史日志文件的shell脚本 2. 配置cron定时任务来定期执行该脚本 考虑到日志文件通常按日期命名(如log.2024-01-01)或包含时间戳,我们可以使用`find`命令来定位并删除定时间之前的文件(比如删除3前的日志)。 具体步骤: 步骤1:创建shell脚本 例如,在日志目录(例如`/var/log/myapp/`)下创建脚本`auto-del-log.sh`,内容如下: ```bash #!/bin/bash # 定义日志目录 LOG_DIR="/var/log/myapp/" # 查找并删除3前的日志文件 find $LOG_DIR -name "*.log.*" -mtime +3 -exec rm -f {} \; ``` 说明: - `-name "*.log.*"`:指定要删除文件名模式(根据实际日志文件名调整) - `-mtime +3`:查找3前(按修改时间)的文件 - `-exec rm -f {} \;`:对每个找到的文件执行rm命令删除 步骤2:赋予脚本执行权限 ```bash chmod +x /var/log/myapp/auto-del-log.sh ``` 步骤3:添加cron定时任务 使用`crontab -e`命令编辑当前用户的定时任务(如果脚本需要root权限,则使用`sudo crontab -e`): 例如,每凌晨1点执行一次: ```bash 0 1 * * * /var/log/myapp/auto-del-log.sh ``` 步骤4:保存并退出,cron会自动加载新任务。 如果遇到问题,可以检查: 1. 脚本是否可执行,路径是否正确 2. cron服务是否运行(`service cron status` 或 `systemctl status crond`) 3. 查看cron日志(通常位于`/var/log/cron`)以确认任务是否执行 注意事项: - 在删除日志前,确保不会删除正在写入的日志文件(一般不会,因为`find`按修改时间查找,而且通常日志文件会按滚动) - 如果日志文件非常重要,建议先备份再删除或者先测试脚本(将`rm`替换为`ls`或`echo`查看会删除哪些文件) - 根据实际需求调整`-mtime`参数(例如+7表示7前)和文件名匹配模式 参考引用内容: [^1]提到需要定时删除日志文件以释放存储空间。 [^2][^3]提供了使用find命令和cron定时任务的具体步骤。 [^4]也提到了删除前的日志文件。 因此,以上方法是符合用户需求的。 相关问题: 1. 如何防止误删正在使用的日志文件? 2. 如何设置删除日志的保留数? 3. 如何监控日志删除脚本的执行情况? </think>### Linux系统中使用Shell脚本定时删除历史日志文件的方法 以下是完整的操作流程(参考[^1][^2][^3][^4]): #### 1. **创建删除脚本** 新建`auto-del-logs.sh`文件(示例路径:`/opt/scripts/`): ```bash #!/bin/bash # 删除/var/log/app/目录下7前的.log.gz文件 find /var/log/app/ -name "*.log.gz" -mtime +7 -exec rm -f {} \; # 删除/tmp/logs/目录下3前的.trace文件 find /tmp/logs/ -name "*.trace" -mtime +3 -exec rm -f {} \; echo "[$(date)] 日志清理完成" >> /var/log/clean.log ``` #### 2. **设置脚本权限** ```bash chmod +x /opt/scripts/auto-del-logs.sh ``` #### 3. **配置定时任务** 使用`crontab -e`添加定时规则(每凌晨2点执行): ```bash 0 2 * * * /opt/scripts/auto-del-logs.sh ``` #### 4. **验证配置** ```bash # 查看任务列表 crontab -l # 测试脚本执行 sh /opt/scripts/auto-del-logs.sh ``` #### 关键参数说明: - `-name "*.log.gz"`:匹配文件名模式 - `-mtime +7`:筛选7前修改的文件 - `-exec rm -f {} \;`:执行删除操作 - `>> /var/log/clean.log`:记录操作日志 #### 注意事项: 1. **测试安全**:首次执行前将`rm`替换为`ls`验证文件列表 2. **权限控制**:日志目录需对执行用户开放权限 3. **服务重启**:若未生效可重启cron服务: ```bash systemctl restart cron # Debian/Ubuntu systemctl restart crond # CentOS/RHEL ``` #### 高级优化: - 保留最新N个文件:`ls -t | tail -n +4 | xargs rm -f` - 压缩日志:添加`find ... -exec gzip {} \;` - 邮件通知:添加`mail -s "清理报告" admin@example.com < cleanup.log` > 此方法可有效解决日志累积导致的存储空间问题,建议首次实施后检查磁盘空间变化确认效果[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值