重定向后缀命令管道的输出

时间:2014-10-16 11:45:55

标签: pipe stdout stderr

我在/etc/postfix/master.cf中创建了一个后缀命令管道,其中包含一个在STDOUT和STDERR上产生输出的有效命令。在终端上调用时一切正常(因此在STDOUT和STDERR上有输出) - 但是当让postfix发出命令时,不会显示输出。我想通过将STDOUT和STDERR重定向到单独的文件来测试它,如下所示:

来自/etc/postfix/master.cf的示例命令     argv = echo foo>> /tmp/test.log

收到电子邮件并将其重定向到此命令,无论如何都是mail.log所说的内容,但是当postfix收到电子邮件时,该文件并未创建。

任何人都知道为什么会这样?

提前致谢

1 个答案:

答案 0 :(得分:1)

pipe(8) documentation解释了为什么会发生这种情况:

  

argv = 命令... (必填)
               要执行的命令。必须将其指定为最后一个                命令属性。该命令直接执行,即shell命令不解释shell元字符                解释

shell没有解释意味着重定向不起作用。相反,>>/tmp/test.log最终会成为echo的其他参数。

根据文档Postfix> = 3.0允许在带有“{”和“}”的参数中引用空格,因此以下内容应该有效:

argv=/bin/sh -c { echo foo >> /tmp/test.log }

我仍然需要找到一个适用于Postfix<的内联解决方案。 3. ATM我试图调用一个包装器shell脚本,然后设置重定向。