Реклама на сайте Advertise with us

Обработка логов

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 09.08.06
Сообщения: 663
Рейтинг: 126

Ссылка на сообщениеДобавлено: 10/01/07 в 01:43       Ответить с цитатойцитата 

В предыдущем топике выяснилось, что лучше разгрузить mysql от логов.

Есть файл my_log, куда я запихиваю все следующим кодом:
Код:
  $f = fopen('my_log', 'a');
  if (flock($f, LOCK_EX))
  {
    fwrite($f, $s);
    flock($f, LOCK_UN);
  }
  fclose($f);


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

Затем по крону нужно этот лог изымать. Как это сделать красиво?
Пока одна идея - переименовывать и обрабатывать, но может возникнуть проблема, если в момент переименования будет цепочка flock ожидать файл, что тогда, потеря данных лога?

0
 



С нами с 26.05.03
Сообщения: 30
Рейтинг: 43

Ссылка на сообщениеДобавлено: 10/01/07 в 02:08       Ответить с цитатойцитата 

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

Если такое и возможно. то как минимум с трафиком ггала или яхи.

wonderfulzi писал:
Затем по крону нужно этот лог изымать. Как это сделать красиво?
Пока одна идея - переименовывать и обрабатывать, но может возникнуть проблема, если в момент переименования будет цепочка flock ожидать файл, что тогда, потеря данных лога?

Почему потеря, после flocka файл будет заблокрован от изменений и не будет удален пока flock его не освободит.

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

4
 



С нами с 03.06.03
Сообщения: 33
Рейтинг: 30

Ссылка на сообщениеДобавлено: 10/01/07 в 10:29       Ответить с цитатойцитата 

badrazor писал:
Если такое и возможно. то как минимум с трафиком ггала или яхи.

файл, открываемый с флагом O_APPEND гарантирует, что данные
будут записаны в конец всегда

badrazor писал:

Почему потеря, после flocka файл будет заблокрован от изменений и не будет удален пока flock его не освободит.

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

4
 



С нами с 29.08.04
Сообщения: 223
Рейтинг: 123

Ссылка на сообщениеДобавлено: 10/01/07 в 10:52       Ответить с цитатойцитата 

wonderfulzi писал:
В предыдущем топике выяснилось, что лучше разгрузить mysql от логов.

Есть файл my_log, куда я запихиваю все следующим кодом:
Код:
  $f = fopen('my_log', 'a');
  if (flock($f, LOCK_EX))
  {
    fwrite($f, $s);
    flock($f, LOCK_UN);
  }
  fclose($f);




Насколько я понял, данные сливаются в файло my_log для последующий обработки?
Если да - то делай так:
1. Создай fifo
2. Пиши туда так :
#/bin/sh
echo "$f" >> /path/to/fifo

Плюсы - элегантность кода (сравни мой и свой вариант), гарантия работы и самое главное - fifo хитро хранится в свободной памяти - если будешь своевременно изымать данные из fifo то диск вообще заюзан небудет.

админю ваши дедики

4
 



С нами с 09.08.06
Сообщения: 663
Рейтинг: 126

Ссылка на сообщениеДобавлено: 10/01/07 в 11:05       Ответить с цитатойцитата 

maple писал:
другое дело, что пока файл открыт кем-то, он не будет физически
удален и с него можно читать на этом открытом дескрипторе


Тоесть между кодом fopen() и fclose() файл защищен от удаления или переименования.

0
 



С нами с 03.06.03
Сообщения: 33
Рейтинг: 30

Ссылка на сообщениеДобавлено: 10/01/07 в 12:13       Ответить с цитатойцитата 

wonderfulzi писал:
Тоесть между кодом fopen() и fclose() файл защищен от удаления или переименования.

да. но не от изменения контента. и если файл будет кем-то другим удален, то после close он все равно пропадет с диска

4
 



С нами с 09.08.06
Сообщения: 663
Рейтинг: 126

Ссылка на сообщениеДобавлено: 10/01/07 в 21:42       Ответить с цитатойцитата 

maple писал:
да. но не от изменения контента. и если файл будет кем-то другим удален, то после close он все равно пропадет с диска


Как это возможно? Удаление/переименование отлаживается?

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »