如何将写入的日志文件的大小限制为>>
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
您可以阅读完整手册这个链接。