|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Eugene Grosbein 2:5006/1 02 Mar 2007 13:49:39 To : Dmitry Mishin Subject : Re: Почему не правильно работает такая конструкция ... --------------------------------------------------------------------------------
02 мар 2007, пятница, в 08:24 KRAST, Dmitry Mishin написал(а):
DM> есть такой скрипт, запускается по крону в 0 часов
DM> ###
DM> /usr/local/sbin/squid -k rotate
DM> cat /var/log/squid/access.log.0 >> /data/log/squid/access.log.03
DM> ###
DM> Посмотрел утром выполнение - в файл /data/log/squid/access.log.03
DM> записалось содержимое файла /var/log/squid/access.log.1
DM> В чем тут ошибка?
squid -k rotate послал сигнал работающей копии squid-а и завершился.
Запустился cat, открыл /var/log/squid/access.log.0. Судя по всему,
работающая копия сквида еще к этому моменту не успела переименовать
логи. cat начал писать. В это время squid переименовывает логи и
access.log.0 переименовывается в access.log.1, что ничуть не мешает
cat-у продолжать читать из этого файла (и помешать не может).
Утром ты смотришь и видишь файл, который теперь называется access.log.1,
но в момент запуска cat файл еще назывался access.log.0
Классический race condition. Условием такое: успеет ли squid переименовать
файлы к моменту запуска cat и открытия им лога. По-хорошему, перед
запуском cat надо как-то проверять, успел или нет. Hапример, перед
squid -k rotate определить дату модификации access.log.0 и в цикле
проверять, не изменилась ли она (если нет, делать sleep 1). И только
после того, как она изменилась, запускать cat.
Hу или более тупо (и менее надежно), вставить что-то типа sleep 10
между squid -k rotate и запуском cat в надежде, что за 10 секунд
сквид всяко успеет переименовать файлы.
Eugene
--
Пробуй, но не смей глотать
--- slrn/0.9.8.0 (FreeBSD)
* Origin: Svyaz Service JSC (2:5006/1@fidonet)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/26093cab5daf2.html, оценка из 5, голосов 10
|