будет ли операция направления заблокировать файл? - PullRequest
0 голосов
/ 04 января 2019

У меня есть растущий файл журнала nginx о 20G уже, и я хочу повернуть его.

1, я mv старый файл журнала вновый файл журнала

2, я делаю > old_log_file.log, чтобы укоротить старый файл журнала примерно за 2 ~ 3 секунды

, если на старом файле журнала есть блокировка (блокировка записи?), когдая делаю усечение (около 2 ~ 3 секунд)?

в этот период 2 ~ 3 с nginx возвращает 502 за ожидание добавления журналов в старый файл журнала до снятия блокировки?

спасибо за объяснение.

Ответы [ 2 ]

0 голосов
/ 05 января 2019

В Linux (почти) нет обязательных блокировок файлов (точнее, раньше в ядре была обязательная функция блокировки , но она устарела, и вы действительноследует избегать его использования).Блокировка файла происходит с flock (2) или lockf (3) и имеет рекомендацию и должна быть явная (например, с flock (1) , или какая-то программа, вызывающая flock или lockf).

Таким образом, каждая блокировка, связанная с файлами, является практически соглашением между всем программным обеспечением, использующим этоfile (и mv (1) или перенаправление вашей оболочкой не использует блокировку файлов).

Помните, что файл в Linux в основном является i-node (см. inode (7) ), который может иметь ноль, один или несколько путей к файлам (см. path_resolution (7) и знать о link (2) , rename (2) , unlink (2) ) и используется через некоторый дескриптор файла .Прочитайте ALP (и, возможно, Операционные системы: три простых компонента ), чтобы узнать больше.

В сценарииваш вопрос (а задействованные i-узлы и файловые дескрипторы независимы).

Рассмотрите возможность использования logrotate (8) .

Некоторые программы предоставляют способперезагрузите их конфигурацию и заново откройте файлы журнала.Вы должны прочитать документацию вашего nginx .

0 голосов
/ 05 января 2019

Зависит от приложения, если он блокирует файл.Приложение, которое генерирует этот файл журнала, должно иметь возможность очистить файл журнала.Например, в редакторе файл vim может быть изменен извне, пока он еще открыт в редакторе.

...