The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"вопрос дилетанта!"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"вопрос дилетанта!" 
Сообщение от and Искать по авторуВ закладки(??) on 24-Фев-05, 13:27  (MSK)
Есть приложение скидывает статистику в обычный файл!
Ничего не подозревающему приложению, вместо файла подсовываю FIFO-файл и вешаю демон!
Теперь статистика сваливается прямо к демону!
То что это работает - факт. Вопрос в том насколько это корректно и потенциально в таком программировании могут быть проблемы?
Т.е. примеры, когда заранее пишется "клиент" и "сервер" для обмена данным через FIFO, конечно же я видел, а вот когда клиент ничего не подозревает и думает, что складывает данные в обычный файл?
Интересны любые замечания!
Заранее спасибо!
  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "вопрос дилетанта!" 
Сообщение от Maxim Kuznetsov Искать по авторуВ закладки on 24-Фев-05, 16:29  (MSK)
>Есть приложение скидывает статистику в обычный файл!
>Ничего не подозревающему приложению, вместо файла подсовываю FIFO-файл и вешаю демон!
>Теперь статистика сваливается прямо к демону!
>То что это работает - факт. Вопрос в том насколько это корректно
>и потенциально в таком программировании могут быть проблемы?
>Т.е. примеры, когда заранее пишется "клиент" и "сервер" для обмена данным через
>FIFO, конечно же я видел, а вот когда клиент ничего не
>подозревает и думает, что складывает данные в обычный файл?
>Интересны любые замечания!
>Заранее спасибо!
номер раз - FIFO синхронизует читатель/писатель, то есть если у тебя к примеру грохнется демон, то программа не сможет писать в FIFO..
(запись в FIFO возможна только при наличии читающей стороны)
номер два - зачем городить такой огород ? через обычный файл все тоже будет работать..то есть один пишет, второй читает и все пучком..даже файл остается в качестве лога ;-) пример `tail -f file`


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "вопрос дилетанта!" 
Сообщение от and Искать по авторуВ закладки(??) on 25-Фев-05, 05:32  (MSK)
>номер раз - FIFO синхронизует читатель/писатель, то есть если у тебя к
>примеру грохнется демон, то программа не сможет писать в FIFO..
>(запись в FIFO возможна только при наличии читающей стороны)
>номер два - зачем городить такой огород ? через обычный файл все
>тоже будет работать..то есть один пишет, второй читает и все пучком..даже
>файл остается в качестве лога ;-) пример `tail -f file`

1) "Грохнуться" может и программа, т.е. насколько я здесь понимаю, здесь главное, что бы демон был граммотно написан и не "грохался"!
2) Я просматривал исходные коды tail. По объему кода всетаки громоздко получается, в какой-то степени если не огород, то надогородок, хочется имеено попроще и логичнее. Теперь по tail, есть еще проблема, ты просто задаешь количество последних строк, при этом нигде не указвается какая строка была последней. Т.е. с какой строки начинать читать.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "вопрос дилетанта!" 
Сообщение от ACCA Искать по авторуВ закладки(ok) on 24-Фев-05, 19:26  (MSK)
>Есть приложение скидывает статистику в обычный файл!
>Ничего не подозревающему приложению, вместо файла подсовываю FIFO-файл и вешаю демон!
>Теперь статистика сваливается прямо к демону!
>То что это работает - факт. Вопрос в том насколько это корректно
>и потенциально в таком программировании могут быть проблемы?

Работать будет, но требует рабочего демона, может останавливаться без всяких сообщений и проч. неприятности. Чесание правого уха левой ногой.

Путь приложение скидывает статистику в STDOUT. После этого ты сможешь

1. Перенаправить её в файл
2. Перенаправить другому приложению через pipe


В любом случае приложение будет думать, что отдаёт в STDOUT. На этой идее построили целую операционную систему, называется Unix.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "вопрос дилетанта!" 
Сообщение от and Искать по авторуВ закладки(??) on 25-Фев-05, 06:00  (MSK)
>Работать будет, но требует рабочего демона, может останавливаться без всяких сообщений и
>проч. неприятности. Чесание правого уха левой ногой.
>
>Путь приложение скидывает статистику в STDOUT. После этого ты сможешь
>
>1. Перенаправить её в файл
>2. Перенаправить другому приложению через pipe

Вот здесь не совсем понятно, но интересно!
1)Предположим сейчас у меня:

TransferLog /var/log/xferlog

Как мне перенапрвить на stdout?

TransferLog /dev/stdout

у меня не работает!
Хотя если делаю, просто:

# echo hello > /dev/stdout
hello

2) Потом, насколько я понимаю если приложение демон, то при старте оно закрывает stdout. Как быть в этом случае?
3) Не совсем понятно, как выбирать нужную статистику из общего stdout?
Вообщем, буду рад подсказкам, если есть примеры подобных приложений, было бы проще сослаться на них?

>
>
>В любом случае приложение будет думать, что отдаёт в STDOUT. На этой
>идее построили целую операционную систему, называется Unix.


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "вопрос дилетанта!" 
Сообщение от Vladimir D Belousov emailИскать по авторуВ закладки on 25-Фев-05, 10:02  (MSK)
>>Работать будет, но требует рабочего демона, может останавливаться без всяких сообщений и
>>проч. неприятности. Чесание правого уха левой ногой.
>>
>>Путь приложение скидывает статистику в STDOUT. После этого ты сможешь
>>
>>1. Перенаправить её в файл
>>2. Перенаправить другому приложению через pipe
>
>Вот здесь не совсем понятно, но интересно!
>1)Предположим сейчас у меня:
>
>TransferLog /var/log/xferlog
>
>Как мне перенапрвить на stdout?
>
>TransferLog /dev/stdout

нет, в этом случае направить надо на STDIN твоего "читателя"
TransferLog |/your/reader/daemon

/your/reader/daemon в это случае просто читает данные с stdin.

>
>у меня не работает!
>Хотя если делаю, просто:
>
># echo hello > /dev/stdout
>hello
>
>2) Потом, насколько я понимаю если приложение демон, то при старте оно
>закрывает stdout. Как быть в этом случае?

STDOUT = open("|/path/to/your/reader",O_WRONLY) может быть?

>3) Не совсем понятно, как выбирать нужную статистику из общего stdout?
>Вообщем, буду рад подсказкам, если есть примеры подобных приложений, было бы проще сослаться на них?

что значит общий STDOUT? Он только твой и тебе решать, что это будет.
STDOUT для тебя может быть чем угодно, начиная от терминала (с чем ты чаще всего встречаешься в видимой жизни) и кончая STDIN-ом другого процесса, как схематически показано выше.

>
>>
>>
>>В любом случае приложение будет думать, что отдаёт в STDOUT. На этой
>>идее построили целую операционную систему, называется Unix.


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "вопрос дилетанта!" 
Сообщение от and Искать по авторуВ закладки(??) on 25-Фев-05, 14:05  (MSK)
>
>нет, в этом случае направить надо на STDIN твоего "читателя"
>TransferLog |/your/reader/daemon
>
>/your/reader/daemon в это случае просто читает данные с stdin.

Что-то видимо не так я делаю!

TransferLog |/usr/scrpts/xferlog

пишу коротенький скрипт:

#!/usr/bin/perl
while($a = <STDIN>){
open (aa,">/usr/scrpts/log");
  print aa $a;
close(aa)
}

Делаю:

echo hello|./xferlog

Читаю в файле log: "hello".
А вот со статистикой молчок (TransferLog)!?

>
>>
>>у меня не работает!
>>Хотя если делаю, просто:
>>
>># echo hello > /dev/stdout
>>hello
>>
>>2) Потом, насколько я понимаю если приложение демон, то при старте оно
>>закрывает stdout. Как быть в этом случае?
>
>STDOUT = open("|/path/to/your/reader",O_WRONLY) может быть?
>
>>3) Не совсем понятно, как выбирать нужную статистику из общего stdout?
>>Вообщем, буду рад подсказкам, если есть примеры подобных приложений, было бы проще сослаться на них?
>
>что значит общий STDOUT? Он только твой и тебе решать, что это
>будет.
>STDOUT для тебя может быть чем угодно, начиная от терминала (с чем
>ты чаще всего встречаешься в видимой жизни) и кончая STDIN-ом другого
>процесса, как схематически показано выше.
>
>>
>>>
>>>
>>>В любом случае приложение будет думать, что отдаёт в STDOUT. На этой
>>>идее построили целую операционную систему, называется Unix.


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "вопрос дилетанта!" 
Сообщение от NewComer emailИскать по авторуВ закладки on 03-Мрт-05, 16:36  (MSK)
>Есть приложение скидывает статистику в обычный файл!
>Ничего не подозревающему приложению, вместо файла подсовываю FIFO-файл и вешаю демон!
>Теперь статистика сваливается прямо к демону!
>То что это работает - факт. Вопрос в том насколько это корректно
>и потенциально в таком программировании могут быть проблемы?
>Т.е. примеры, когда заранее пишется "клиент" и "сервер" для обмена данным через
>FIFO, конечно же я видел, а вот когда клиент ничего не
>подозревает и думает, что складывает данные в обычный файл?
>Интересны любые замечания!
>Заранее спасибо!

Эту идею я когда-то использовал при написании системы учета сквидового трафика. Вместо access.log я создавал фифо, сделал демона, который висел на другом конце трубы и кидал логи в постгресовую БД.

Впоследствии я от этой идеи отказался по следующим причинам:
1 - демон должен всегда сидеть в памяти;
2 - возникает зависимость основного сервиса, сквида в моем случае, от другого сервиса (моего логгера), а того, в свою очередь, от третьего сервиса (БД), и, следовательно, значительно возрастает вероятность отказа основной службы.

Остановился я на такой схеме: основной сервис, как и прежде, пишет свои логи в файл, а переливалка логов запускается периодически, по крону, перебрасывает новую порцию лога в базу и обнуляет файл лога. При этом никто ни от кого не зависит и надежность нисколько не страдает.

Удачи

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру