Unexepected results when piping syslog to a fifo
Robert Bonomi
bonomi at mail.r-bonomi.com
Fri Nov 30 09:19:13 UTC 2012
> Date: Thu, 29 Nov 2012 22:21:30 -0600
> From: Paul Schmehl <pschmehl_lists at tx.rr.com>
> Subject: Re: Unexepected results when piping syslog to a fifo
>
> Now I'm even more confused. According to man (5) syslog.conf, a pipe
> should redirect its output to /dev/null.
>
> " A vertical bar (``|''), followed by a command to pipe the
> selected
> messages to. The command is passed to sh(1) for evaluation, so
> usual
> shell metacharacters or input/output redirection can occur. (Note
> however that redirecting stdio(3) buffered output from the invoked
> command can cause additional delays, or even lost output data in
> case
> a logging subprocess exited with a signal.) The command itself
> runs
> with stdout and stderr redirected to /dev/null."
>
> And yet this:
>
> *.* |cat > /var/run/program/program.fifo results in the log data going both
> to the fifo and to /var/log/messages. I really don't want to fill up the
> messages log with this stuff. Any suggestions?
to clear up the confusion:
1) syslogd creates an environment where stdout/stderr are set to /dev/null,
invokes sh in that environment, passing it the command string for
evaluation/execution. If the command string does *not* redirect
stdout/stderr, they are /dev/null.*IF* redirected in he command string,
things go where redirected.
2) syslogd writes messages to _every_ destination where the selection
criteria match. To accomplish what you want you'll need something
like:
+remotehost
*.* |cat >fifo
-remotehost
{console criteria} /dev/console
{'messages' criteria} /var/log/messages
{{ etc., etc.}}
[ you may need "+* on it's own line just before "-remotehost"
More information about the freebsd-questions
mailing list