Дублировать входной поток unix для нескольких клиентов TCP (используя socat)

У меня есть сервер системного журнала, который пишет в поток unix /tmp/syslog.socket. Мне нужно продублировать этот поток для нескольких клиентов TCP. Есть ли способ добиться этого с помощью socat?


person Calin Don    schedule 26.01.2012    source источник
comment
Но системный журнал обычно udp?   -  person Michael Krelin - hacker    schedule 26.01.2012
comment
Да. Для моей настройки он получает данные от других машин, используя UDP, и записывает их в сокет потока unix.   -  person Calin Don    schedule 26.01.2012
comment
@CalinDon работает ли мой предложенный ответ, чтобы вы его приняли?   -  person lkraav    schedule 29.04.2015


Ответы (2)


Я думаю, что только что сделал это, особенно часть дублирования, с помощью Некоторые полезные команды socat.

socat TCP-LISTEN:4444,reuseaddr,fork SYSTEM:"tail -f ~/.tail-error-logs/*",pty

fork важно слева, pty важно справа.

Что не сработало, так это стиль netcat:

tail -f ~/.tail-error-logs/* | socat STDIO TCP-LISTEN:4444,fork,reuseaddr

Это привело к чередованию вывода между несколькими подключенными клиентами, что также задокументировано на вышеуказанном веб-сайте.

person lkraav    schedule 06.07.2012
comment
Почему pty важно? Когда я оставляю это, проблема чередования прекращается, и все данные отправляются всем клиентам. - person Thor; 13.05.2015

syslogd имеет средство для перераспределения журналов через udp, см. справочную страницу для syslogd, т.е.

http://linux.about.com/od/commands/l/blcmdl8_syslogd.htm

Я считаю, что syslog-ng также поддерживает сокеты tcp для перераспределения журналов, а также udp.

http://www.syslog.org/syslog-ng/v2/

Я предполагаю, что вам не нужен хак с сокатом?

person Vorsprung    schedule 26.01.2012
comment
Насколько я знаю, системный журнал может только писать в пункт назначения и читать из пункта назначения (может быть только один конец ссылки); он не может прослушивать соединение, а затем записывать в это соединение. - person Calin Don; 27.01.2012