На основе идеи системного журнала в моем комментарии:
tail -n1 -q -f --retry $YOURFILE 2>/dev/null |logger
Это, кажется, работает с CentOS 5. Увидимся локальные страницы справочника для хвоста и регистратора.
В CentOS существует предупреждение об использовании "-повторная попытка", которая переходит к stderr и должна быть подавлена.
С logger
можно отправить сообщения в системный журнал - который в свою очередь будет обычно предварительно ожидать метку времени.
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
перезапущен как часто по мере необходимости, и любой EOF
s появляющийся в out
канал эффективно обрабатывается.
Я имел сталкивающийся с этой проблемой также. Основная проблема 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
теперь независимо от того, что Вы вводите, будет распечатан снова (после того, как удар Входит). Закрытие этой команды также закроет соединение.
netcat -t -l -p 4000 < loopFF | tee loopFF
не вызывают бесконечную обратную связь с собой?
– noffle
02.06.2012, 00:18
netcat -t -l -p 4000 < loopFF | tee loopFF
не вызывают бесконечную обратную связь с собой?
– noffle
02.06.2012, 00:18
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)
.)
Другой пример здесь.
write(stdout): Broken pipe
после (или вскоре после) пишущий вout
канал. – noffle 21.06.2012, 19:21