Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Системное программирование > Блокировка файла в родственных процессах |
Автор: kond 24.5.2013, 14:08 |
Надо периодически сбрасывать содержимое лог-файла в архив. Вот так мы пишем в лог: flock($fh, LOCK_EX); seek($fh, 0, SEEK_END); print $fh $line."\n"; flock($fh, LOCK_UN); А вот сброс в архив с обнулением лога: flock(LOG, LOCK_EX) or die "Cannot lock - $!\n"; seek(LOG, 0, 0); open ARC, ">$log_archive" or die "Cannot write - $!\n"; while(<LOG>) { print ARC; } close ARC; seek(LOG, 0, 0); truncate(LOG, 0); flock(LOG, LOCK_UN); Все прекрасно работает в отдельном скрипте, запускаемом по крону или руками. Хотелось (не спрашивайте, из каких соображений) не запускать отдельный скрипт, а делать это в коде самого демона. И тут оказалось, что часть данных теряется. Пробовал играть с типами болировки и буферизацией - безрезультатно (возможно - не тем играл?). Собственно, если не получится, можно оставить как есть. Так что вопрос, скорее, чисто спортивный - почему тот же код работает корретно из разных процессов и глючит из родственных? |