Я пытаюсь разобрать журналы rsyslog. Для этого я отправляю все свои журналы в socat, который затем отправляет их в Unix Domain Socket. Этот сокет создается через скрипт perl, который прослушивает этот сокет для анализа журналов.Не удалось подключиться к сокету с помощью socat
Моего Баш скрипт, который Rsyslog посылает весь журнал является
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";
}
Существует эта ошибка, я получаю от Соката которого
2015/02/24 11:58:01 socat[4608] E connect(3, AF=1 "/tmp/sock", 11): Connection refused
Я не являюсь чемпионом в сокетах, поэтому ia я не мог понять, что это такое. Пожалуйста помоги. Заранее спасибо.
Основная проблема заключается в том, что, когда я убиваю свой скрипт perl, тогда скрипт bash должен вызвать его снова и запустить. Что на самом деле происходит, так это то, что sript запущен, но socat не запускается, а дает эту ошибку и никогда не запускается.
Вы определяете подпрограмму, но где вы ее называете? – reinierpost