linux logrotate 删除某天前

crontab

crontab -l
01 */2 * * * /usr/sbin/logrotate -v /opt/shell_app/appengine >/tmp/logrotate.log 2>&1

logrotate

$ cat /opt/shell_app/appengine
compress
daily
size 10M
missingok
rotate 7

/ebs_data/opt/typhoonae/var/log/http*.log
{
    rotate 1
    prerotate
        /opt/shell_app/cut.sh ${1}.2.gz
    endscript
    postrotate
        kill -USR1 $(/sbin/pidof nginx) > /dev/null 2>&1 || true
    endscript
    create 644 steve steve
}

/opt/proftpd/var/*.log
/opt/gltfs/*.log
/opt/redis/var/*.log
{
    copytruncate
    prerotate
        /opt/shell_app/cut.sh ${1}.8.gz
    endscript
}

shell cut.sh

#!/bin/sh
#usage:add this script to logrotate‘s prerotate/endscript
#${1} is the absolute path to the log file
#${1}.3.gz means which file to bak and 3 is rotate‘s count add 1
#e.g.
#prerotate
#       /opt/shell_app/cut.sh ${1}.3.gz
#endscript

set -x
if [ -f $1 ]; then
        filepath=${1}
        filedir=$(dirname ${1})
        filename=$(basename ${1})
else
        exit 0
fi

c_date=$(date +%Y%m%d%H%M%S)
y_date=`date --date="1 days ago" +%Y%m%d`
w_date=`date --date="3 days ago" +%Y%m%d`

function clean_and_bak_log(){
    if [[ -d ${filedir}/bak ]];then
        echo "bak dir is exsited"
    else
        mkdir -p ${filedir}/bak
        chmod a+w ${filedir}/bak
    fi
    #insert current time to filename
    #${#filename}-3} means cut ‘.gz‘ from filename
    #example cp /opt/shell_app/test.log.3.gz /opt/shell_app/bak/test.log.3.201703061814.gz
    cp -p ${filedir}/${filename} ${filedir}/bak/${filename:0:${#filename}-3}.${c_date}.gz
    #rm -f ${filedir}/bak/*${w_date}*.gz
    find ${filedir}/bak/ -regextype posix-extended -regex ‘^.*[0-9]{14,14}\.gz$‘ -mtime +5 -print0 | xargs -0 /bin/rm -f

}

备注:若某天日志量较大,使用以上策略可能会对磁盘空间产生压力

参考链接:
gnu findutils

原文地址:http://blog.51cto.com/chaoyuezhangsan/2065003

时间: 2024-10-18 07:59:55

linux logrotate 删除某天前的相关文章

linux自动删除n天前日志

linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志,不用每天收到硬盘空间不足的报警短信,想好好休息的话,让我们把这个事情交给机器定时去执行吧. 1.删除文件命令: find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 实例命令: find /opt/soft/log/ -mtime +30

Linux 自动删除N天前的文件

Linux是一个很能自动产生文件的系统,日志.邮件.备份等.但是对于一些时间久远的日志可以设置定时任务删除.语句写法:find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;例1:find /usr/local/backups -mtime +30 -name "*.*" -exec rm -rf {} \;将/usr/local/backups目录下所有30天前带"."的文件删除find:linux

linux自动删除规定天数前的文件

公司在线上有一个监控系统,每天都会制造大量文件,然后就需要删除规定天数以前的文件,用来保证硬盘不会满造成服务中断. 语句也很简单, #delete 15 days ago picture files find /home/monitoring/ -mtime +15 -exec rm -rf {} \; -mtime -n +n 按文件更改时间来查找文件,-n指n天以内,+n指n天以前 -exec: find命令对匹配的文件执行该参数所给出的shell命令.相应命令的形式为'command' {

python脚本删除n天前文件可用于windows,linux并且支持跨平台

脚本如下: #!/usr/local/python/bin/python # -*-coding=utf8 -*- import time import os, sys # 设置删除多少天前的文件 N = 3 #要删除路径 path = r'/tmp/wry/abc' def deletefile(path): for eachfile in os.listdir(path): filename = os.path.join(path, eachfile) if os.path.isfile(f

Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录(转)

文章转自:http://www.osyunwei.com/archives/8998.html 说明: 操作系统:CentOS Mongodb安装目录:/usr/local/mongodb Mongodb数据库存放目录:/home/data/mongodb/mongodb_data Mongodb日志存放目录:/home/data/mongodb/mongodb_log 实现目的: 对Mongodb数据库日志按天保存,并且只保留最近7天的日志记录. 具体操作: 使用Mongodb数据库自带的命令

shell脚本删除N天前的文件夹-----附linux和mac上date命令的不同

背景: 每日构建的东西,按日期放到不同的文件夹里.如今天的构建放到2015-06-01里,明天的就放到2015-06-02里,依次类推.时间久了,需要一个脚本删除N天前的文件夹.(本例中N=7,即删除一周前的构建). 下面直接上代码,linux版: #! /bin/bash historyDir=~/test/ today=$(date +%Y-%m-%d) echo "---------today is $today-----------" tt=`date -d last-week

linux系列之-—04 自动删除n天前日志

linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志,不用每天收到硬盘空间不足的报警短信,想好好休息的话,让我们把这个事情交给机器定时去执行吧. 1.删除文件命令: find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 实例命令: find /opt/soft/log/ -mtime +30

Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份

#!/bin/bash #设置Oracle数据库运行账号及oracle的系统环境变量 export ORACLE_BASE=/data/oracle export ORACLE_HOME=$ORACLE_BASE/product/10g export ORACLE_SID=test export PATH=$ORACLE_HOME/bin:$HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/li

Linux下自动备份Oracle数据库并删除指定天数前的备份

Oracle数据库服务器 操作系统:CentOS IP:192.168.0.198 端口:1521 SID:orcl Oracle数据库版本:Oracle11gR2 具体操作: 1.root用户登录服务器 mkdir -p /backup/oracledata #新建Oracle数据库备份目录 chown -R oracle:oinstall /backup/oracledata -R #设置目录权限为oinstall用户组的oracle用户(用户oracle与用户组oinstall是在安装Or