我想操作日志。到目前为止,对我来说,清除系统日志的最佳方法是:
truncate -s 0 /var/log/*log
我正在寻找最佳方法来:
1 - 定期执行上述操作。我已经尝试过了logrotate
,但我无法将其设置为完全符合我的要求,即仅保留原始日志文件并定期截断它而不删除它。
- 更新:
根据北布拉德利回答这里解决方案似乎是lastaction/endscript
在 logrotate 配置文件中使用选项。因此,使用以下设置可以完美运行:
/var/log/*log{
rotate 0
size 0
hourly
nocreate
maxage 0
missingok
nocompress
ifempty
copytruncate
lastaction
rm -rf /var/log/*log.1
endscript
}
选项copytruncate
将日志复制到新日志文件中,忽略rotate 0
和nocreate
,然后截断原始日志。轮换所有日志文件后,rm
将lastaction/endscript
删除由创建的所有新日志文件copytruncate
。最后,我们只清除了原始文件。
2 - 清除最后‘n’条条目
3 - 阻止/取消阻止新条目,类似于冻结/解冻。为此,我正在考虑使用ln -s /dev/null /var/log/*log
,但我不知道是否可以轻松恢复它而无需任何脚本。或者也许备份/恢复状态技术可以提供帮助。
还有其他方法可以帮助我完成上述所有操作(2 和 3)吗?
答案1
Logrotate 是专门为处理此类任务而设计的,并且它的表现相当出色。我建议你使用它。
现在,让我们看看(如果有必要 - 修复)你的 logrotate 文件,使用 Ubuntu 的好心人提供的手册页(关联)。
您的版本:
# File: /etc/logrotate.d/.test
/var/log/*log{
size 0
hourly
nocreate
copytruncate
rotate 0
}
我建议您使用以下内容:
# File: /etc/logrotate.d/.test
/var/log/*.log{
# the rotate option sets how many times the log files are rotated before being removed. Setting it to 0 means - delete right away (you'll only have the original)
rotate 0
# the size option sets what size should a file reach before being rotated - I'm setting it to 10MB, but you can change it as it pleases you
size 10M
# The size option will prevail this option. The daemon will run hourly, but won't rotate the log file until it reaches 10 MB
hourly
# this option fits your requirement not to create new log files
nocreate
# delete rotated log files older than 0 days
maxage 0
# truncate the original file rather creating new one
nocopytruncate
}