我目前正在尝试找出一种方法来整理由Cron创建的Oracle恢复日志文件...
目前,我们的Oracle备用恢复进程由Cron使用以下命令每15分钟调用一次:
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
这将创建如下所示的文件:
$ 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:
/data/tier2/scripts/logs/recover_standby_*.log {
daily
dateext
dateformat %d%m%Y
maxage 7
missingok
}
为了得到想要的结果,我是否遗漏了什么?
我想我可以从Crontab日志文件中删除日期,然后让logrotate轮换该文件,但是日志文件中的日期不会反映日志生成的日期……也就是说,010313上的恢复将在日期为020313的文件中,这是由于在020313上执行logrotate并旋转文件...
还有其他想法吗?如果您有任何回复,请提前向您致谢。
问候
加文
发布于 2014-12-19 12:56:27
Logrotate根据轮换的日志文件名列表中按词法排序的顺序以及文件年龄(使用文件的上次修改时间)删除文件
要在每日轮换的文件中保留给定的天数(例如7天),您必须将rotate
设置为值7,如果您的文件确实是每天创建和轮换的,则可以忽略maxage
。
如果几天内没有创建日志,a.g.在14天内,循环日志文件的数量将保持不变(7)。
maxage
将通过总是删除太旧的文件来改善“日志未生成”的情况。在没有日志生产的7天后,将不存在轮换的日志文件。
正如OP所示,您不能使用dateformat
,因为它不是词法可排序的。搞乱dateformat
可能会导致删除其他轮换日志文件,而不是您真正想要的。
提示:使用-d
选项从命令行运行logrotate来执行预演:您将看到logrotate会做什么,但实际上不会做任何事情。然后使用-v
(verbose)执行手动运行,这样您就可以确认所做的就是您想要的。
解决方案:清理cron创建的日志
其概念是:
让cron创建和更新日志文件,但在使用默认dateext
时,根据标准文件名做一些小的修改来创建文件
/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log
使用logrotate仅用于删除太旧的日志文件
/data/tier2/scripts/logs/recover_standby_SID.log
missingok
以允许日志清理发生rotate
设置得足够高,以涵盖要保留的日志文件数量(如果每天有一个“轮换”的日志文件,则至少有7个,但您可以安全地将其设置得非常高,如9999)maxage
设置为7。这将删除上次修改时间大于7的文件仅用于确保logrotate搜索看起来像是轮换的较旧文件。<代码>H246<代码>F247Logrotate配置文件将如下所示:
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
/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配置将如下所示:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 7
maxage 7
dateext
dateyesterday
}
请注意,您可能需要使用copytruncate和其他类似的选项,这些选项与外部进程如何创建源日志文件以及它如何对轮换行为做出反应有关。
发布于 2013-02-13 18:42:36
您可以使用find
命令轻松完成该任务!它将删除所有7 Days
旧文件。将其放在crontab
中,然后每晚运行:
$ cd /data/tier2/scripts/logs/
$ /usr/bin/find . -mtime +7 -name "*.log" -print -delete
或者更好的方式
$ /usr/bin/find /data/tier2/scripts/logs/ -mtime +7 -name "*.log" -print -delete;
发布于 2013-10-04 17:05:34
(更新)您的选项包括:
后旋转命令中。
最初,我认为更改日期格式以匹配您的日志可能会起作用,但正如Reid Nabinger指出的那样,日期格式无论如何都与logrotate不兼容。最近,我尝试配置相同的东西,但对于Java轮换日志,我希望logrotate删除。我尝试了下面的配置,但它一直在尝试删除所有日志
/opt/jboss/log/server.log.* {
missingok
rotate 0
daily
maxage 30
}
我最终只是实现了萨蒂什的建议--在cron中用rm脚本实现一个简单的find。
https://stackoverflow.com/questions/14858752
复制