С нами с 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 ожидать файл, что тогда, потеря данных лога?
|
|
|
|
С нами с 26.05.03
Сообщения: 30
Рейтинг: 43
|
Добавлено: 10/01/07 в 02:08 |
wonderfulzi писал: | Первая трабла: fopen в данном случае откроет файл и поставит указатель в конец. Может случится так, что после выполнения flock данное положение указателя не будет указывать на конец, так как другой процесс запишет свои данные, тогда этот может их попросту затереть на верх. Как обойти эту ситуацию? |
Если такое и возможно. то как минимум с трафиком ггала или яхи.
wonderfulzi писал: | Затем по крону нужно этот лог изымать. Как это сделать красиво?
Пока одна идея - переименовывать и обрабатывать, но может возникнуть проблема, если в момент переименования будет цепочка flock ожидать файл, что тогда, потеря данных лога? |
Почему потеря, после flocka файл будет заблокрован от изменений и не будет удален пока flock его не освободит.
В целом хочу сказать, не заморачивайся с такими проблемами. В действительности их скорее всего никогда не будет.
|
|
|
|
С нами с 03.06.03
Сообщения: 33
Рейтинг: 30
|
Добавлено: 10/01/07 в 10:29 |
badrazor писал: | Если такое и возможно. то как минимум с трафиком ггала или яхи.
|
файл, открываемый с флагом O_APPEND гарантирует, что данные
будут записаны в конец всегда
badrazor писал: |
Почему потеря, после flocka файл будет заблокрован от изменений и не будет удален пока flock его не освободит.
|
неверно
flock никак не препятствует удалению или изменению файла.
единственное что он делает, это блочит другой flock на тот же файл,
если на нем уже висит один flock.
другое дело, что пока файл открыт кем-то, он не будет физически
удален и с него можно читать на этом открытом дескрипторе
|
|
|
|
С нами с 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 то диск вообще заюзан небудет.
|
|
|
|
С нами с 09.08.06
Сообщения: 663
Рейтинг: 126
|
Добавлено: 10/01/07 в 11:05 |
maple писал: | другое дело, что пока файл открыт кем-то, он не будет физически
удален и с него можно читать на этом открытом дескрипторе |
Тоесть между кодом fopen() и fclose() файл защищен от удаления или переименования.
|
|
|
|
С нами с 03.06.03
Сообщения: 33
Рейтинг: 30
|
Добавлено: 10/01/07 в 12:13 |
wonderfulzi писал: | Тоесть между кодом fopen() и fclose() файл защищен от удаления или переименования. |
да. но не от изменения контента. и если файл будет кем-то другим удален, то после close он все равно пропадет с диска
|
|
|
|
С нами с 09.08.06
Сообщения: 663
Рейтинг: 126
|
Добавлено: 10/01/07 в 21:42 |
maple писал: | да. но не от изменения контента. и если файл будет кем-то другим удален, то после close он все равно пропадет с диска |
Как это возможно? Удаление/переименование отлаживается?
|
|
|
|