Используя в / именованных каналах для соединения TCP

На основе идеи системного журнала в моем комментарии:

tail -n1 -q -f --retry $YOURFILE 2>/dev/null |logger

Это, кажется, работает с CentOS 5. Увидимся локальные страницы справочника для хвоста и регистратора.

В CentOS существует предупреждение об использовании "-повторная попытка", которая переходит к stderr и должна быть подавлена.

С logger можно отправить сообщения в системный журнал - который в свою очередь будет обычно предварительно ожидать метку времени.

15
26.05.2012, 01:56
3 ответа
cat out | netcat foo.bar.org 4000 > in &

Я думаю, что проблема - это cat выйдет, как только это получает EOF от out канал. И когда cat выходы, остальная часть конвейера (включая netcat) завершается также.

Попробуйте что-то вроде этого вместо этого:

while true; do cat out; done | netcat foo.bar.org 4000 > in &

Таким образом, cat перезапущен как часто по мере необходимости, и любой EOFs появляющийся в out канал эффективно обрабатывается.

6
27.01.2020, 19:50
  • 1
    , я попробовал это, но все еще получаю write(stdout): Broken pipe после (или вскоре после) пишущий в out канал. –  noffle 21.06.2012, 19:21

Я имел сталкивающийся с этой проблемой также. Основная проблема netcat. Это - большой инструмент, но это закрывает соединение, когда одни из его связанных дескрипторов файлов ввода или вывода закрываются. Это ничего не делает, когда сервер не слушает, и это выходит, когда другой одноранговый узел закрывается. Пока Вы устанавливаете сервер правильно и сохраняете Ваши дескрипторы файлов открытыми, он будет работать. Например, я протестировал следующий сценарий, и он работал очень хорошо: в установке терминала сервер эха (я настроил его как ниже):

mkfifo loopFF
netcat -t -l -p 4000 <loopFF | tee loopFF

теперь в другом терминале устанавливают Ваше соединение FIFO с Вашим сервером:

mkfifo in
mkfifo out
netcat 127.0.0.1 4000 <out >in &

распечатайте любой сервер, отправляет Вам (и поддерживайте его в рабочем состоянии, если Вы используете in первым прибыл, первым обслужен в приложении, которое закрывает один конец после его завершения, netcat закрывает соединение),

cat in &

и в том же терминале:

cat > out

теперь независимо от того, что Вы вводите, будет распечатан снова (после того, как удар Входит). Закрытие этой команды также закроет соединение.

2
27.01.2020, 19:50
  • 1
    I видит, что не имеет место, когда я пробую его сам, но почему делает netcat -t -l -p 4000 < loopFF | tee loopFF не вызывают бесконечную обратную связь с собой? –  noffle 02.06.2012, 00:18
  • 2
    I видит, что не имеет место, когда я пробую его сам, но почему делает netcat -t -l -p 4000 < loopFF | tee loopFF не вызывают бесконечную обратную связь с собой? –  noffle 02.06.2012, 00:18
  • 3
    @noffle, потому что, поскольку я сказал, netcat закроется каждый раз, когда одно из его сетевых соединений закрывается. Если Вы закрываете клиент (который отправляет строку и получает ту же строку), netcat сервер будет закрыт также. Я записал серверный код для меня в этом случае что ветвления сам, чтобы обработать несколько клиентов и снова соединиться клиентов. –  saeedn 02.06.2012, 12:19

Анализ Steven Monday выглядит хорошим мне: cat возвраты после Вашей 1-й записи к out потому что FIFO empty. Избегать, чтобы, решение состояло в том, чтобы сохранить процесс с FIFO открытым в режиме записи, 1-м cat в реве в качестве примера:

mkfifo in
mkfifo out
cat > out &
echo $! > out-pid
cat out | netcat foo.bar.org 4000 > in &

(Изодромный с предварением файл является способом остановить все это: kill -9 $(cat out-pid).)

Другой пример здесь.

2
27.01.2020, 19:50

Теги

Похожие вопросы