Linux:在File中输出管道直到

时间:2014-09-12 07:54:25

标签: linux shell pipe logfile

在文件大小达到限制或被其他条件取消之前,是否有人知道如何将输出传输到文件?这可能吗?

如何使用filesize,time duration等条件取消将输出写入文件('$ cmd>> file.txt 2>& 1')?

编辑:我启动一个应用程序,我需要前1000行输出,而不需要停止应用程序本身!不希望记录完整的应用程序生命周期。

3 个答案:

答案 0 :(得分:3)

示例:

seq 10000 | tee -i somefile | head -n 1000

这会将seq中的所有数据捕获到somefile中,1000行将打印到stdout。你必须使用tee -i忽略中断,否则当头部结束时它会中断tee,这会中断seq。

答案 1 :(得分:1)

对于时间限制,请使用timeout。对于大小限制,请使用tee --max-bytes

如果你要寻找的是日志文件管理,你应该考虑使用rsyslogd来处理日志轮换,大小,时间等。

答案 2 :(得分:1)

  

我需要前1000行输出,而不需要停止应用程序本身!

1) 我认为一种简单的方法是使用两个规则来管道sed。第一条规则' 1,1000w head-lines.txt'用于保存到文件head-lines.txt,第二个规则用于打印。

首先写入1000行文件,打印所有行:

$ seq 1000000000000 | sed -n -e '1,1000w head-lines.txt' -e '1,$p'

首先写入1000行文件,打印所有行,从1001开始:

$ seq 1000000000000 | sed -n -e '1,1000w head-lines.txt' -e '1001,$p'

参考文献:

2) 更复杂的方法是在bash中处理SIGPIPE。在bash中,我将运行seq 100000000,它在我的服务器上运行很长时间,并且只在文件中输出前1000行:

$ trap "" SIGPIPE && seq 100000000 2>/dev/null  | head -n 1000 > your.log 

head获得前1000行时,它将结束,通常SIGPIPE将被发送到seq。但是我调用trap来忽略SIGPIPE:

$ help trap
trap: trap [-lp] [[arg] signal_spec ...]
    Trap signals and other events.

    If ARG is the null string each SIGNAL_SPEC is ignored by the
    shell and by the commands it invokes.