Страница 1 из 1

Как проверить поднят ли pipe канал

Добавлено: 2008-02-19 14:38:37
IrviS
Привет ребят!

Настроен сквид.
Данные которые он передает пропускаю через ./squid2mysql
использую pipe-канал. (# mkfifo /var/log/squid/access.log)
запускаю так

Код: Выделить всё

squid_start() {
    ./usr/local/sbin/squid2mysql < /usr/local/squid/logs/access.log &
    echo "Starting fifo."
    ${command} ${squid_flags}
    echo "Starting ${name}."
}
Хочу сделать проверку: запустился ли pipe-канал

За ранее всем спасибо!

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-19 17:36:06
Alex Keda
если файл есть, и его кто-то слушает - то поднялся

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 3:23:37
Гость
lissyara, как ты узнаешь слушает ли его кто-то? это ведь не сокет...
можно конечно проверить живы ли pid'ы тех процессов, кои должны fifo слушать и существует ли сам файл... однако может случится так, что и pid'ы, и файл на месте, а данные не идут: anonymous pipe'ы где-то не подняты, к-ые соединяют программу и named pipe или глюк в самой программе

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 8:55:46
IrviS
Гость, squid2mysql не создает пид и как отследить, что по тунелю бегает траф, кроме как команды cat ни чего не спасает. Вопрос остается актуальным.

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 8:57:33
zingel
man stat

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 9:37:58
Adekamer
1 внимательно следить за SIGPIPE
2 для тестирования можно попробовать еще tee вкорячить (но это очень осторожно)
3 ключик -m испозовать при создании наймпайпа а то потом не всегда ясно что там с пермишенами
4 в последователях system V (коим не является BCD - но например LInux это последователь) есть отдельные настройки ядра управляющие IPC

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 10:28:50
Alex Keda
Гость писал(а):lissyara, как ты узнаешь слушает ли его кто-то? это ведь не сокет...
можно конечно проверить живы ли pid'ы тех процессов, кои должны fifo слушать и существует ли сам файл... однако может случится так, что и pid'ы, и файл на месте, а данные не идут: anonymous pipe'ы где-то не подняты, к-ые соединяют программу и named pipe или глюк в самой программе
в общем - согласен, но исходя из прямых программ чтения - тайл например - достаточно проверить что он жив.

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 11:27:44
Гость
IrviS писал(а):Гость, squid2mysql не создает пид и как отследить, что по тунелю бегает траф, кроме как команды cat ни чего не спасает. Вопрос остается актуальным.
Ну так отлови pid при помощи pgrep(1)
$! (pid of last background job) был дан для примера.
zingel писал(а):man stat
например? как ме определить consumer'ов у fifo при помощи stat(1)? fstat(1) молчит...
Adekamer писал(а):1 внимательно следить за SIGPIPE
и когда же SIGPIPE должен появится? че-то trap "echo gotcha" pipe у меня его не ловит
Adekamer писал(а):2 для тестирования можно попробовать еще tee вкорячить (но это очень осторожно)
tee <>fifo log что ли? неа, тогда данные так и остануться в tee, а до адресата не дойдут
Adekamer писал(а):4 в последователях system V (коим не является BCD - но например LInux это последователь) есть отдельные настройки ядра управляющие IPC
sysctl -a | grep ipc
lissyara писал(а):в общем - согласен, но исходя из прямых программ чтения - тайл например - достаточно проверить что он жив.
tail -f съест все данные... или есть какойто способ прослушки pipe'а, чтобы не повредить поток в нем?

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 11:32:51
Alex Keda
насчёт прослушки - думаю пишется на раз - читаем строку, отдаём её на стдоут, и до кучи ещё куданить - на стерр или в файл....
такая вот прокладка...
а чтоб штатно чём-то такое изобразить - даже не знаю =(

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 11:37:24
Гость
lissyara писал(а):насчёт прослушки - думаю пишется на раз - читаем строку, отдаём её на стдоут, и до кучи ещё куданить - на стерр или в файл....
такая вот прокладка...
Так если я не ошибаюсь то pipe(2) работает не построчно ;(

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 11:38:54
Alex Keda
тредстартер вроде логи туда писал?
Или я топик спутал...
==========
не суть - можно делать посимвольно.

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 12:03:43
Adekamer
этта - дело в том что SIGPIPE появляется когда один пыиается писать - а читать то оттуда уже не читают - и процессу срущему в трубу посылается сигпаййп - а вот обработка сигпайпа в БСДе кривая и сильно отличается от классической system V
tee надо опосля сигпайпа поставитьт- чтоб он читал и передавал уже дальше
по ядру - в линухе (2.6 ветка) за IPC отвечают msgmax msgmni msgmnb sem если не ошибаюсь

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 12:11:00
idle
sockstat -u

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 13:08:59
Alex Keda
lissyara писал(а):тредстартер вроде логи туда писал?
Или я топик спутал...
==========
не суть - можно делать посимвольно.
и получиться всё тот же tee...
Велосипед =)

Re: Как проверить поднят ли pipe канал

Добавлено: 2008-02-20 13:13:01
zingel
например? как ме определить consumer'ов у fifo при помощи stat(1)? fstat(1) молчит...

Код: Выделить всё

stat -x `ls /var/log/* | grep squid` | grep -v 'Uid:' | awk '{print $5}' | sort -rn | sed 5q | grep -E ^[1-9] | xargs lsof
я бы это добро в for засунул, с условием if сквид умер then запустить эту команду и всё это добро в крон (раз в час)