LINUX.ORG.RU
ФорумAdmin

tail | nc , замучали зомби


1

1

всем доброго дня.

есть простецкая задача

tail -f /var/log/mysqld/general.log | nc xxx.xxx.xxx.xxx 11111

те просто шлём лог на нужный порт. всё работает хорошо. НО, если разорвать соединение (рестартануть принимающий сервис например) - nc умирает, но tail продолжает висеть в памяти. и что хуже - появляется процесс зомби, стоить убить tail - зомби уходит.

собственно отслеживать tail, шлющий данные в никуда и убивать его - не unix way))

хотелось бы организовать передачу таким образом - чтоб в случае отваливания принимающей стороны tail отстреливался.

ps. писать на perl/php/ruby/java/etc не предлагать )

Перемещено beastie из development

если в скрипте - tail -f --pid=«$$» ...

ananas ★★★★★
()

предложу юзать syslog/syslog-ng и не заниматься таким вот непотребством

genesis_error
()

я бы рассмотрел вариант отправки через сислог. тоже не юниксвей?
тогда фанатики не нужны! (с)

aol ★★★★★
()
Ответ на: комментарий от aol

ну я ж не зря указал mysqld/general.log )

в сислог пихать каждый день по 20гб?

loginrl103
() автор топика

man rsyslog

anonymous
()
Ответ на: комментарий от ananas

и как оно поможет? bash-> tail | nc

шелл всегда остаётся открытым пока работает tail. зачем мне знать pid родителя?

loginrl103
() автор топика

Стандартные логгеры (например syslog-ng) отлично умеют передавать информацию через сеть.

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

syslog-ng умеет беспрерывно считывать файл как tail -f и передавать на удалённый порт? или же надо ему самому подкидывать данные для логирования?

loginrl103
() автор топика
Ответ на: комментарий от loginrl103

для этого надо узнать пид nc, это геморнее, а тот вариант - цельная вещь в себе

Гм, да, приходит в голову только с помощью mkfifo.

Но оказывается в случае nc можно проще:

nc -l -p 9977 -c "tail -f $1"

http://stackoverflow.com/questions/1652680/how-to-get-the-pid-of-a-process-th...

gv
()
Ответ на: комментарий от loginrl103

syslog-ng умеет беспрерывно считывать файл как tail -f и передавать на удалённый порт?

В syslog-ng в качестве источника данных можно указать в том числе файл.
См. source, pipe.

Там очень гибкий конфиг, если это логирование будет использоваться постоянно, я бы использовал его.

gv
()
Ответ на: комментарий от loginrl103

syslog-ng умеет беспрерывно считывать файл как tail -f и передавать на удалённый порт?

Да. Еще между этим фильтровать, если нужно.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от gv

Там очень гибкий конфиг, если это логирование будет использоваться постоянно, я бы использовал его.

хм, попробую затестить. может реально удобнее окажется

loginrl103
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.