将多个输出同时输出到同一个文件?

时间:2010-01-19 20:09:26

标签: bash shell

说我有一个bash脚本:

#!/bin/bash
php ./listen.php 3001 3003 26 &
php ./listen.php 3002 3004 120 &

我可以同时将所有这些管道传输到相同的输出日志文件而不会发生冲突吗? 例如:

#!/bin/bash
php ./listen.php 3001 3003 26 >/tmp/log 2>&1 &
php ./listen.php 3002 3004 120 >/tmp/log 2>&1 &

4 个答案:

答案 0 :(得分:4)

>会覆盖,因此您需要>>。默认情况下,stdout是行缓冲的,因此相对安全。 stderr不是。您应该考虑写入系统日志。

答案 1 :(得分:2)

除非您积极地冲洗标准输出,否则您可能会获得交错输出。管道到logger(1)命令要好得多,它会以逻辑方式写入系统日志。不要被-f选项愚弄(因为我!) - 它不会让你登录到文件;相反,它将该文件的内容写入系统日志。 (感谢Platinum Azure进行更正。)

N.B。如果您的系统上没有访问系统日志的权限,则可以使用-u选项写入套接字。您可以使用netcat将套接字连接到文件。

答案 2 :(得分:0)

最有可能的是,每次写入都会占用新的行终止行。

Hovewer来自两个应用程序的线路将是互相干扰的。试着看看。

答案 3 :(得分:0)

理论上你可以:

#!/bin/bash

{ php ./listen.php 3001 3003 26 & php ./listen.php 3002 3004 120 & } >/tmp/log 2>&1

但我不知道结果的可读性。