我的服务器上有几个日志文件,我希望将其大小限制为 100MB。我正在考虑创建一个每月运行一次的 cron 作业,并从每个日志文件中删除最旧的字符(最接近顶部),使每个日志文件的大小为 100 兆或更小。我怎样才能做到这一点?
答案1
我正在考虑创建一个每月运行一次的 cron 作业,并从每个日志文件中删除最旧的字符(最接近顶部),从而减少每 100 兆的大小。
这种方法可能会出现一些问题,因此首先请确保日志记录过程正常,并在您以这种方式编辑文件时继续记录。如果它保持文件句柄打开,这可能是一个坏主意。
管理日志的正常方法是使用logrotate
,但请注意,这也存在潜在的问题 - 某些应用程序对交换日志文件反应不佳。系统记录器实际上属于这一类,并且必须在轮换后收到信号才能重新打开新日志。
如果可以记录到标准输出或标准错误,则可以避免中断进程的类似选项是使用管道日志。 Pipelog 充当进程和日志文件的中介,以便您可以向其发送信号以轮换或删除日志,而不会中断或干扰任何内容:
> someprocess | pipelog someprocess.logfile &
[pipelog 5334] Using 'someprocess.logfile' as a log file.
然后,您可以通过发送管道日志 SIGUSR1: 来轮换日志kill -s USR1 5334
,或者删除它并使用 SIGUSR2 启动一个新日志。
答案2
使用logrotate
,它会轮换您的日志并根据您的需要压缩它们。它很可能已经在您的系统上运行,因此在 /etc/logrotate.d 中创建一个文件来告诉 logrotate 如何处理您的日志。检查 man 文件以了解规格...
答案3
man split
会帮助你。尤其是-b
国旗。