2014-10-16 101 views
4

我在/etc/postfix/master.cf中用一个在STDOUT和STDERR上产生输出的有效命令创建了一个postfix命令管道。在终端上调用时一切正常(所以在STDOUT和STDERR上有输出) - 但是当让postfix发出命令时,不显示输出。我想通过重定向STDOUT和STDERR来测试这单独的文件,像这样:从/etc/postfix/master.cf 的argv重定向postfix命令管道的输出

样品命令=回声富>> /tmp/test.log

的电子邮件被接收并正确地重定向到这个命令,这就是mail.log无论如何说的,但是当postfix收到一封电子邮件时不会创建文件。

任何人都知道为什么会发生这种情况?

在此先感谢

回答

1

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

argv的 = 命令要执行(必填)
命令。这必须被指定为最后的 命令属性。该命令是直接执行的,即没有通过shell命令解释器解释shell元字符。

shell没有解释意味着重定向不起作用。相反,>>/tmp/test.log只是作为echo的附加参数结束。

根据该文件后缀> = 3.0允许带有参数报价空白“{”和“}”,所以下面应该工作:

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

我还是要找到一个在线解决方案,与工程Postfix < 3.自动柜员机我诉诸调用一个封装外壳脚本,依次设置重定向。