首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Logrotate清理带日期戳的文件

Logrotate清理带日期戳的文件
EN

Stack Overflow用户
提问于 2013-02-13 16:55:05
回答 5查看 100.5K关注 0票数 31

我目前正在尝试找出一种方法来整理由Cron创建的Oracle恢复日志文件...

目前,我们的Oracle备用恢复进程由Cron使用以下命令每15分钟调用一次:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0,15,30,45 * * * * /data/tier2/scripts/recover_standby.sh SID >> /data/tier2/scripts/logs/recover_standby_SID_`date +\%d\%m\%y`.log 2>&1

这将创建如下所示的文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ls -l /data/tier2/scripts/logs/
total 0
-rw-r--r-- 1 oracle oinstall 0 Feb  1 23:45 recover_standby_SID_010213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  2 23:45 recover_standby_SID_020213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  3 23:45 recover_standby_SID_030213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  4 23:45 recover_standby_SID_040213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  5 23:45 recover_standby_SID_050213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  6 23:45 recover_standby_SID_060213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  7 23:45 recover_standby_SID_070213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  8 23:45 recover_standby_SID_080213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  9 23:45 recover_standby_SID_090213.log
-rw-r--r-- 1 oracle oinstall 0 Feb 10 23:45 recover_standby_SID_100213.log
-rw-r--r-- 1 oracle oinstall 0 Feb 11 23:45 recover_standby_SID_110213.log
-rw-r--r-- 1 oracle oinstall 0 Feb 12 23:45 recover_standby_SID_120213.log

我基本上想删除超过x天的文件,我认为logrotate将是完美的…

我已经使用以下配置文件配置了logrotate:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/data/tier2/scripts/logs/recover_standby_*.log {
    daily
    dateext
    dateformat %d%m%Y
    maxage 7
    missingok
}

为了得到想要的结果,我是否遗漏了什么?

我想我可以从Crontab日志文件中删除日期,然后让logrotate轮换该文件,但是日志文件中的日期不会反映日志生成的日期……也就是说,010313上的恢复将在日期为020313的文件中,这是由于在020313上执行logrotate并旋转文件...

还有其他想法吗?如果您有任何回复,请提前向您致谢。

问候

加文

EN

回答 5

Stack Overflow用户

发布于 2014-12-19 12:56:27

Logrotate根据轮换的日志文件名列表中按词法排序的顺序以及文件年龄(使用文件的上次修改时间)删除文件

  • rotate是旋转文件的最大数量,你可能会发现。如果循环日志文件的数量较多,则按词法对其名称进行排序,并删除词法最小的文件。
  • maxage定义了删除循环日志文件的另一个标准。任何早于给定天数的循环日志文件都将被删除。请注意,日期是从文件的上次修改时间检测到的,而不是从文件中检测到的。name.
  • dateformat允许对轮换文件中的日期进行特定格式设置。手册页说明,sorting.
  • dateyesterday允许在一天前的日志文件名中使用日期,格式应导致词法正确。

要在每日轮换的文件中保留给定的天数(例如7天),您必须将rotate设置为值7,如果您的文件确实是每天创建和轮换的,则可以忽略maxage

如果几天内没有创建日志,a.g.在14天内,循环日志文件的数量将保持不变(7)。

maxage将通过总是删除太旧的文件来改善“日志未生成”的情况。在没有日志生产的7天后,将不存在轮换的日志文件。

正如OP所示,您不能使用dateformat,因为它不是词法可排序的。搞乱dateformat可能会导致删除其他轮换日志文件,而不是您真正想要的。

提示:使用-d选项从命令行运行logrotate来执行预演:您将看到logrotate会做什么,但实际上不会做任何事情。然后使用-v (verbose)执行手动运行,这样您就可以确认所做的就是您想要的。

解决方案:清理cron创建的日志

其概念是:

让cron创建和更新日志文件,但在使用默认dateext时,根据标准文件名做一些小的修改来创建文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log

使用logrotate仅用于删除太旧的日志文件

  • 瞄准不存在的日志文件/data/tier2/scripts/logs/recover_standby_SID.log
  • use missingok以允许日志清理发生
  • rotate设置得足够高,以涵盖要保留的日志文件数量(如果每天有一个“轮换”的日志文件,则至少有7个,但您可以安全地将其设置得非常高,如9999)
  • maxage设置为7。这将删除上次修改时间大于7的文件仅用于确保logrotate搜索看起来像是轮换的较旧文件。<代码>H246<代码>F247

Logrotate配置文件将如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 9999
    maxage 7
    dateext
}

解决方案:每天通过logrotate直接轮换一次

我不确定,源恢复备用文件是如何创建的,但我会假设,Oracle或您的某个脚本定期或不断地附加到文件/data/tier2/scripts/logs/recover_standby_SID.log

其概念是:

对于包含恢复数据的日志文件,logrotate

  • working每天通过/data/tier2/scripts/logs/recover_standby_SID.log

  • daily直接轮换文件一次daily)

  • rotate将导致每天轮换一次(就number).

  • maxage对(days)

  • dateext的理解而言,必须将daily)

  • rotate设置为7(或将任何更高的number).

  • maxage设置为7(days)

  • dateext才能使用默认的logrotate date suffix

  • dateyesterday,用于使已轮换文件中的日期后缀返回一天。

H174<即使没有要旋转的新内容,也可以使用/code>missingok清除旧文件。

Logrotate配置将如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 7
    maxage 7
    dateext
    dateyesterday
}

请注意,您可能需要使用copytruncate和其他类似的选项,这些选项与外部进程如何创建源日志文件以及它如何对轮换行为做出反应有关。

票数 41
EN

Stack Overflow用户

发布于 2013-02-13 18:42:36

您可以使用find命令轻松完成该任务!它将删除所有7 Days旧文件。将其放在crontab中,然后每晚运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd /data/tier2/scripts/logs/    
$ /usr/bin/find . -mtime +7 -name "*.log" -print -delete

或者更好的方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ /usr/bin/find /data/tier2/scripts/logs/ -mtime +7 -name "*.log" -print -delete;
票数 29
EN

Stack Overflow用户

发布于 2013-10-04 17:05:34

(更新)您的选项包括:

  • 正如萨蒂什回答的那样,放弃logrotate并将查找脚本放入cron
  • 中您甚至可以使用logrotate并将查找脚本放入

后旋转命令中。

最初,我认为更改日期格式以匹配您的日志可能会起作用,但正如Reid Nabinger指出的那样,日期格式无论如何都与logrotate不兼容。最近,我尝试配置相同的东西,但对于Java轮换日志,我希望logrotate删除。我尝试了下面的配置,但它一直在尝试删除所有日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/opt/jboss/log/server.log.* {
    missingok
    rotate 0
    daily
    maxage 30
}

我最终只是实现了萨蒂什的建议--在cron中用rm脚本实现一个简单的find。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14858752

复制
相关文章
Swift 类型转换
类型转换可以判断实例的类型,也可以将该实例在其所在的类层次中视为其父类或子类的实例。
赵哥窟
2020/07/28
1.1K0
Swift 2.2 多态和强制转换
 写在前面:     写点东西,就是想告诉自己,有时间其实你也在前进着,快慢不说,至少没停下吧!该有的都会有的。不瞎BB了,说主题,3.0 的多态和继承。     总觉得继承好像也没什么太多的可说的了,在项目中用到的还是挺多的,反倒。是多态,我也知道有这个特性,说实话自己也不知道该在哪里可以用的到。但很多东西你可能会用,但你也不知道为什么的时候,可能你才会感受到基础知识是有用的。   一:多态的概念: 相同类型的变量在调用同一个方法呈现出多种不同的行为特征,这就叫多态。先丢这里吧,看了下面的东西,再回过
Mr.RisingSun
2018/01/09
7210
Swift 2.2 多态和强制转换
Swift专题讲解十九——类型转换 原
        在Objective-C和Java中,任何类型实例都可以通过强转使编译器认为它是另一种类型的实例,这么做其实是将所有的安全检查工作都交给了开发者自己来做。先比之下,Swift中的Optional类型转换就会比较安全与可靠。
珲少
2018/08/15
7950
swift动画 —— 颜色渐变以及转换动画
这篇文章是通过结合使用CAGradientLayer、CABasicAnimation
CC老师
2022/01/14
2.1K0
swift动画 —— 颜色渐变以及转换动画
python 预测目标(y)的转换
LabelEncoder是一个可以用来将标签规范化的工具类,它可以将标签的编码值范围限定在[0,n_classes-1]。这在编写高效的Cython程序时是非常有用的,:class:LabelEncoder可以如下使用:
用户1359560
2018/08/27
4820
Swift3.0项目升级到4.2遇到问题
版权声明:转载请标明出处 https://blog.csdn.net/ZY_FlyWay/article/details/88824879
星宇大前端
2019/04/09
1.3K0
Swift入门:多态性与类型转换
因为类可以相互继承(例如CountrySinger可以从Singer继承),这意味着一个类实际上是另一个类的超集:B类拥有A类所拥有的所有东西,还有一些额外的东西。这反过来意味着你可以把B当作B型或者A型,这取决于你的需要。
韦弦zhy
2020/03/19
9590
Swift 如何使用Uint和Measurement转换单位
iOS 10引入了一种新的系统,用于计算距离,长度,面积,体积,持续时间以及更多测量值。让我们从简单的事情开始。如果您六英尺高,则可以创建一个Measurement实例,如下所示:
韦弦zhy
2020/03/23
1.4K0
C++ 中有符号类型到无符号类型的转换
为了更好地解释下面的代码,先来介绍一些背景知识,在我的计算机中, char 类型占 8 个比特位,那么, unsigned char 类型能表示的数的范围为 0 ~ 2的8次方 - 1,即 0 ~ 255,共 256 个数;int 类型占 32 个比特位,那么 unsigned 类型所能表示的数的范围为 0 ~ 2的32次方 - 1,即 0 ~ 4294967295,共 4294967296 个数,接下来看下面的代码:
用户7886150
2021/02/15
1.4K0
进制转换问题
以:整型数据类型的整数-为例 十进制-二进制 正数 十进制数除以2取余数; 余数倒叙排列; 得到得数字串即为十进制数对应得二进制数 示例:(30) 30(十进制) ===> 11110(二进制) 负数 将十进制转换为二进制数(不先管符号) 对该二进制数求反:0改成1、1改成0 再将该二进制数加1 总之就是将十进制数转换为二进制数求补码即为结果 示例:(-32) 32(十进制) = 00100000(二进制) 求反:11011111 加1: 11100000 结果:11100000(二进制) 二进制
小沐沐吖
2022/09/09
8370
进制转换问题
Swift 3到5.1新特性整理
Swift 5.0 最重要的自然是ABI Stability, 对此可以看这篇 Swift ABI 稳定对我们到底意味着什么 。
小刀c
2022/08/16
4.7K0
Swift 3到5.1新特性整理
a标签目标链接问题
2、确定文件寻找路径,因为css.html的父目录是css,而body.html在body目录下,所以需要先退到上一目录head然后再到body目录下寻找body.html
IT人一直在路上
2019/09/18
6090
a标签目标链接问题
现今 Swift 包中的二进制目标
在 iOS 和 macOS 开发中, Swift 包现在变得越来越重要。Apple 已经努力推动桥接那些缝隙,并且修复那些阻碍开发者的问题,例如阻碍开发者将他们的库和依赖由其他诸如 Carthage[1] 或 CocoaPods[2] 依赖管理工具迁移到 Swift 包依赖管理工具的问题,例如没有能力添加构建步骤的问题。这对任何依赖一些代码生成的库来说都是破坏者,比如,协议和 Swift 生成。
Swift社区
2022/12/12
1.9K0
Swift3项目升级到Swift5
源项目 https://www.jianshu.com/p/3228bfa3be7d 曾经Swift3写的,业余更新造成年久失修。
Light413
2020/04/24
1.3K0
Swift3项目升级到Swift5
Swift 5.2到5.4新特性整理
SE-0287提案改进了Swift使用隐式成员表达式的能力。Swift 5.4之后不但可以使用单个 使用,而且可以链起来使用。
小刀c
2022/08/16
2.3K0
Swift 5.2到5.4新特性整理
RN集成到现有原生应用-swift
创建一个空文件夹命名为你RN项目名称,在里面再新建一个文件夹/ios,把你现有的swift项目全部拷贝到/ios文件夹内。
用户6094182
2019/08/23
1.9K0
RN集成到现有原生应用-swift
Swift开发: 常见问题汇总
1、Unknown class xxClass in Interface Builder file. 这个问题出现在使用Xib时设置自定义类名的时候。在参考OC的写法创建了自定义的类,而且也在xib中
梧雨北辰
2018/04/24
7080
Swift开发: 常见问题汇总
内存转换Image到Icon
System.IO.MemoryStream mStream = new System.IO.MemoryStream();///创建内存流
Java架构师必看
2021/03/22
5270
当前时区时间 转换为 目标时区时间
张紫娃
2023/07/21
3240
当前时区时间 转换为 目标时区时间
目标时区时间 转换为 当前时区时间
张紫娃
2023/07/21
2480
目标时区时间 转换为 当前时区时间

相似问题

数据表的几个列的子列和赋值

27

使用子查询和唯一值插入

10

在实例表中插入几个外键

11

唯一键,插入忽略和表分区

20

插入表中包含标识列和外键列

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文