Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux:在文件中管道输出直到_Linux_Shell_Pipe_Logfile - Fatal编程技术网

Linux:在文件中管道输出直到

Linux:在文件中管道输出直到,linux,shell,pipe,logfile,Linux,Shell,Pipe,Logfile,有人知道如何将输出通过管道传输到文件,直到文件大小达到限制或被其他条件取消?这可能吗 在文件大小、持续时间等条件下,如何取消将输出写入文件('$cmd>>file.txt 2>&1') 编辑:我启动一个应用程序,我需要前1000行输出,而不停止应用程序本身!不需要记录完整的应用程序生存期。对于时间限制,请使用超时。对于大小限制,请使用tee--max bytes 如果你所寻找的是日志文件管理,你应该考虑使用 RSIGPRODD ,它处理日志旋转、大小、时间等。 我需要前1000行输出,而不停止应

有人知道如何将输出通过管道传输到文件,直到文件大小达到限制或被其他条件取消?这可能吗

在文件大小、持续时间等条件下,如何取消将输出写入文件('$cmd>>file.txt 2>&1')


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

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

如果你所寻找的是日志文件管理,你应该考虑使用<代码> RSIGPRODD ,它处理日志旋转、大小、时间等。 我需要前1000行输出,而不停止应用程序本身

(一) 我认为一个简单的方法是使用两条规则将管道连接到
sed
。第一条规则“11000W 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'
参考资料:

(二) 更复杂的方法是在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.
例如:

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


这将把seq中的所有数据捕获到somefile中,并将1000行打印到stdout。您必须使用tee-i来忽略中断,否则当前端结束时,它将中断tee,这将中断seq。

没有提到
--max bytes
。在my RHEL上,它也不可用:
tee:unrecognized option'--max bytes'
也会终止命令,因此在cmd中调用应用程序可能也会终止应用程序。然而,在您的示例中,
seq
将完成工作,而OP希望看到
而不停止应用程序本身@skwllsp我将其更改为使用“tee-I”。它应该允许seq继续。