如何使用 >> 限制日志文件大小

如何使用 >> 限制日志文件大小

如何将写入的日志文件的大小限制为>>200MB?

$ run_program >> myprogram.log

答案1

如果您的应用程序(即run_program)不支持限制日志文件的大小,那么您可以使用外部应用程序或脚本定期循环检查文件大小。

您还可以使用logrotate(8)要旋转您的日志,它具有size可用于您目的的参数:

这样,当达到指定的大小时,日志文件就会轮换。大小可以以字节(默认)、千字节 (sizek) 或兆字节 (sizem) 为单位指定。

答案2

如果您的程序不需要写入任何大于此限制的其他文件,您可以使用 通知内核此限制ulimit。在运行命令之前,运行以下命令为当前 shell 会话中运行的所有进程设置 200MB 文件大小限制:

ulimit -f $((200*1024))

这将保护您的系统,但可能会对写入文件的程序造成干扰。作为埃亚兹奇建议,考虑设置logrotate为在日志文件达到一定大小或期限后对其进行修剪。您可以丢弃旧数据或将其归档在一系列压缩文件中一段时间​​。

答案3

您可以创建一个新的文件系统映像,使用循环设备挂载它并将日志文件放在该文件系统上:

dd if=/dev/zero of=./200mb.img bs=1024 count=200000 # create new empty 200MB file
mkfs.ext2 200mb.img # or ext3, or whatever fits your needs
mkdir logs
sudo mount -t ext2 -o loop 200mb.img logs # only root can do '-o loop' by default
run_program >>logs/myprogram.log

如果您有足够的内存,您也可以使用tmpfs而不是文件。

答案4

软件包中apache2-utils存在名为 的实用程序rotatelogs,它可能对您有帮助。

概要:

旋转日志 [ -l ] [ -L链接名] [-p程序] [ -f ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n文件数量] 日志档案旋转时间|文件大小(B|K|M|G) [抵消]

例子:

your_program | rotatelogs -n 5 /var/log/logfile 1M

您可以阅读完整手册这个链接

相关内容