我正在尝试解析 rsyslog 日志。为此,我将所有日志发送到 socat,然后将它们发送到 Unix Domain Socket。该套接字是通过 perl 脚本创建的,该脚本正在侦听该套接字以解析日志。
rsyslog 向其发送所有日志的我的 bash 脚本是
if [ ! `pidof -x log_parser.pl` ]
then
./log_parser.pl & 1>&1
fi
if [ -S /tmp/sock ]
then
/usr/bin/socat -t0 -T0 - UNIX-CONNECT:/tmp/sock 2>> /var/log/socat.log
fi
/tmp/sock
是使用 perl 脚本创建log_parser.pl
的
use IO::Socket::UNIX;
sub socket_create {
$socket_path = '/tmp/sock';
unlink($socket_path);
$listner = IO::Socket::UNIX->new(
Type => SOCK_STREAM,
Local => $socket_path,
Listen => SOMAXCONN,
Blocking => 0,
)
or die("Can't create server socket: $!\n");
$socket = $listner->accept()
or die("Can't accept connection: $!\n");
}
socket_create();
while(1) {
chomp($line=<$socket>);
print "$line\n";
}
我从 socat 得到这个错误是
2015/02/24 11:58:01 socat[4608] E connect(3, AF=1 "/tmp/sock", 11): Connection refused
我不是插座方面的冠军,所以我无法理解这是什么。请帮忙。提前致谢。
主要问题是,当我杀死我的 perl 脚本时,假设 bash 脚本会再次调用它并启动它。实际发生的是 sript 已启动但 socat 未启动,而是给出此错误并且永远不会启动。