Страница 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 ipclissyara писал(а):в общем - согласен, но исходя из прямых программ чтения - тайл например - достаточно проверить что он жив.
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 запустить эту команду и всё это добро в крон (раз в час)