Dear Wise Monks,
I have been playing around with reading a FIFO that was created like so:
Then I modified my /etc/syslog.conf ...$ sudo mkfifo /var/log/blackhole.pipe
... then restart syslogd. I can test like by executing ...$ cat /etc/syslog.conf ... # test logger script local1.* |/var/log/blackhole.pipe
.. and ...$ logger -p local1.info "test test" $ logger -p local1.info "test test" $ logger -p local1.info "test test" $ logger -p local1.info "test test2"
... but when I run this scripts ...$ cat /var/log/blackhole.pipe Oct 3 11:16:09 localhost plankton: test test Oct 3 11:16:15 localhost last message repeated 2 times Oct 3 11:16:19 localhost plankton: test test2
... I get this output ...$ cat process_blackhole.pl #!/usr/bin/perl -w use strict; $|=1; my $fifo_file = "/var/log/blackhole.pipe"; my $fifo_fh; open($fifo_fh, "+< $fifo_file") or die "The FIFO file \"$fifo_file\" i +s missing, and this program can't run without it.:$!"; # just keep reading from the fifo and processing the events we read while (<$fifo_fh>) { chomp; print "read from pipe [$_]\n"; } # should never really come down here ... close $fifo_fh; exit(0);
... The strange thing is I do not always get the last message repeated 4 times output consistently. Is there something else besides $|=1 and using the +< on my open call ?$ sudo ./process_blackhole.pl read from pipe [Oct 3 11:22:45 localhost plankton: test test] read from pipe [Oct 3 11:22:52 localhost plankton: test test2]
In reply to Understanding FIFO pipes and Syslog by Plankton
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |