У меня есть cron, который генерировал много (15 ГБ) предупреждений PHP и записывал их в файл журнала.
Я остановил процесс и в качестве временной меры перестал перенаправлять stderr на stdout, чтобы не заполнять свое хранилище.
После изменения я продолжал получать те же предупреждения о высоком уровне ввода-вывода, и хранилище сервера временно увеличивалось, а затем возвращалось к предыдущему размеру. Исходный файл журнала был пуст.
Я нашел один файл, используя lsof -p <PID of cron>
это становилось все больше с каждой секундой.
sh 25626 root 10u REG 202,1 21280244045 773 /tmp/tmpfZ14vFH (deleted)
Этот файл отмечен как удаленный, и я не могу найти его в каталоге / tmp.
Пожалуйста, расскажите немного об этом.
Записывает ли ОС stderr во временный файл во время выполнения процесса?
Вы должны выполнить цикл (запустить / остановить) процесс, который удерживает дескриптор файла.
Проверить с ps -ef |grep 25626
в качестве отправной точки, чтобы найти процесс, который его удерживает, и, если возможно, выполнить цикл. Это позволит дескриптору файла освободиться, и дисковое пространство будет очищено.
Я знаю, что ты уже это сделал (обнаружил, что sh
это рассматриваемый процесс), но вот моя команда в моих заметках (вероятно, найденная в прошлом при обмене стеками) для поиска этих загадочно удаленных файлов: lsof | grep deleted | numfmt --field=7 --to=iec | head