如何从bash翻转标准输出?
我有一个在后台运行的脚本,可以打印一些输出。出于日志目的,我将标准输出重定向到一个文件。但是,我不希望这个文件永远增长,如果不自己编写逻辑代码,什么是实现滚动的好方法?(根据日期或文件大小进行滚动)。通过管道将输出转换为类似的内容,它将为您处理所有这些内容 例如:如何从bash翻转标准输出?,bash,shell,logging,file-io,scripting,Bash,Shell,Logging,File Io,Scripting,我有一个在后台运行的脚本,可以打印一些输出。出于日志目的,我将标准输出重定向到一个文件。但是,我不希望这个文件永远增长,如果不自己编写逻辑代码,什么是实现滚动的好方法?(根据日期或文件大小进行滚动)。通过管道将输出转换为类似的内容,它将为您处理所有这些内容 例如: script_that_produces_output.sh |multilog s2000 ./logdir 将运行脚本,将stdout捕获到一个名为/logdir/current的文件中。当stdout大于2000字节时,将其旋
script_that_produces_output.sh |multilog s2000 ./logdir
将运行脚本,将stdout捕获到一个名为
/logdir/current
的文件中。当stdout大于2000字节时,将其旋转。除了multilog之外,套件中还有一个类似的工具,名为svlogd。由于daemontools(multilog)最近才成为公共领域,您可能会发现它已经打包在您的发行版中。您可以利用rotatelogs
():您所需要做的只是通过管道将输出传递给它,提供很少的选项,其余的就由它来处理了。例如:
your_script.sh | rotatelogs /var/log/your.log 100M
将在输出文件达到100M时自动旋转输出文件(可配置为基于时间间隔旋转)。这取决于日志记录程序在日志旋转后关闭并重新打开日志。
logrotate
可向可捕获和处理日志的程序发送信号。很简单。你能举一个关于如何使用multilog的简单例子吗?