Понимание вывода resizefs -d 32

Как только процесс открывает файл, вы можете делать с этим файлом все, что угодно, например, переименовывать его, усекать и даже удалять, но процесс все равно будет открывать этот файл. Распространенной ошибкой является то, что когда файл журнала израсходовал все дисковое пространство, его удаляют, пытаясь освободить место. Однако процесс записи в файл журнала все еще открыт, поэтому место не освобождается. Только когда процесс закроет файл, блоки, выделенные для файла, будут освобождены. (Обходным путем здесь является усечение файла, т. е. > logfile.)

В вашем случае вы переименовали файл, но процесс записи в него не знает и не заботится об этом.

У утилиты logcheckесть опция copytruncateдля таких ситуаций :она копирует лог-файл в повернутое имя, а затем усекает оригинал. Вы можете сделать то же самое:

rotateLog() {
    currentsize=$(du -k $LOGFILE | cut -f1)
    if [ $currentsize -ge $MAX_LOGFILE_SIZE ]; then
            ROTATEDLOG=$LOGFILE.$(date +%Y%m%d%H%M%S)
            cp -p $LOGFILE $ROTATEDLOG && true > $LOGFILE
    fi
}

Лучшей альтернативой было бы изменить процесс, чтобы понять, например.сигнал SIGHUP, чтобы закрыть и снова открыть файл журнала. См. команду оболочки trapдля обработки этого.

0
28.06.2021, 19:57
0 ответов

Теги

Похожие вопросы