Каким-то образом процесс все еще записывает в файл, хотя я переименовал его.
Это называется нормальной работой операционной системы . Как только файл открыт, для процесса (ов) с дескриптором открытого файла не имеет значения, какое имя (имена) у файла, или даже если у файла вообще есть имя.
Проще говоря, схема журналирования вашей программы (если это действительно так и есть) является софоморной. Вы точно понимаете, почему это софомора. Этот файл будет расти и расти вечно, пока программа, генерирующая журнал, продолжает работать, пока она не израсходует все дисковое пространство, доступное пользователю, от имени которого она работает. (Небеса помогут вам, если ваша программа работает от имени суперпользователя.) Если кто-то отсоединит файл, программа будет продолжать занимать место на диске бесконечно, потому что файл продолжает существовать на диске без имени, пока его последний открытый дескриптор файла не будет закрыт. И невозможно повернуть файл журнала или сбросить позицию файла дескриптора открытого файла извне самой программы. Так что даже усечение не работает, потому что программа продолжает писать с последней позиции, так какэтот человек обнаружил .
Теперь вы ничего не можете сделать, если не подключите отладчик, пока программа не завершится. В следующий раз скажите вашей программе, чтобы она регистрировала свою стандартную ошибку или стандартный вывод, если это возможно Затем отправить что стандартная ошибка / стандартный выход через трубу к программе, такой как multilog
, multilog
, s6-log
, svlogd
, tinylog
, или cyclog
. Вы получите ограниченный по размеру, автоматически циклически изменяемый набор файлов журналов с возможностью поворота по требованию.
В следующий раз плохое действие - открыть файл в режиме добавления. Вам придётся копаться с копированием и усечением журнала, потому что вращение путем переименования файла все равно не будет работать; и, конечно, это может привести к потере данных журнала, как logrotate
говорится на странице руководства, из-за окна возможности между копированием и усечением файла. Вышеупомянутые инструменты ведения журнала, напротив, не теряют данные журнала в непредсказуемых точках из-за ротации журналов, подобных newsyslog
или logrotate
(которые не нужны и не используются). Используйте их вместе с супервизором процессов, который поддерживает канал открытым, и они даже не теряют данные журнала, когда кто-то перенастраивает и перезапускает регистратор на лету.