[syslog-ng] write() failed (errno 32)

Balazs Scheidler bazsi@balabit.hu
Fri, 7 Apr 2000 16:16:53 +0200


> > > > > destination aaa { program ("/usr/bin/mail -s WARN user"); };
> > > > > log { source(src); filter (aaa); destination(aaa); };
> [...]
> > > It looks like mail is waiting for something to finish (<CTRL>C means pressing
> > > CTRL+C).
> > 
> > Of course it's waiting for something, the body of the message. 
> 
> So it means that I misunderstood documentation. It is written in there:
> 
>    This driver fork()'s executes the given program with the given
>    arguments and sends messages down to the stdin of the child.
> 
> I expected that it (driver program()) will send line of message
> to stdin of mail.
> Am I wrong, Bazsi (look at begin of my e-mail, there is part of 
> my configuration file) ?

syslog-ng forks, executes the given program and keeps this program running
while syslog-ng is reinitialized or is shut down. Lines are written to the
stdin as they become available, but the stream is not closed after each
line. So mail waits for a line, and waits for the next one and so on,
presumably until its internal buffer gets full. It then probably exits, thus
the pipe is broken, which results in the error message emitted by syslog-ng.

I hope I could clear up the situation. Use a small script reading a single
line at a time, and lauch mail after each line, like I suggested in one of
my previous messages.

-- 
Bazsi
PGP info: KeyID 9AF8D0A9 Fingerprint CD27 CFB0 802C 0944 9CFD 804E C82C 8EB1
     url: http://www.balabit.hu/pgpkey.txt