Cronjob «На устройстве не осталось места» при регистрации ошибки, но место есть

Cronjob «На устройстве не осталось места» при регистрации ошибки, но место есть

Я пытаюсь устранить некоторые неполадки cronjob, поэтому хочу начать регистрировать их.

* * * * * wget https://www.example.com/dosomething.php >> /var/log/myjob.log 2>&1

При просмотре файла журнала я получаю несколько ошибок типа «На устройстве не осталось места», хотя задание cron выполняется успешно.

Я проверил df и df -i, чтобы проверить хранилище и иноды, и у меня достаточно места для хранения.

Что является причиной этой конкретной ошибки «На устройстве не осталось места» при ее регистрации?

--2022-12-09 19:32:08--  https://www.example.com/dosomething.php
Resolving www.example.com (www.example.com)... x.x.x.x
Connecting to www.example.com (www.example.com)|x.x.x.x|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 0 [text/html]
dosomething.php.962181: No space left on device

Cannot write to 'dosomething.php.962181' (Success).

введите описание изображения здесь

решение1

Я подозреваю, что тысохранял новый файл каждый раз при запуске этого скриптаи достиг некоторого предела ресурсовдругойчем общий размер содержимого файла.

Попробуйте df -iпоискать использование inode. Многие файловые системы накладывают ограничение не только на общий объем файласодержание, но дополнительно к записям метаданных файлов, необходимым для хранения их имен, владельца, времени, разрешений, .. Если вы видите миллион инодов, это будет намного больше, чем обычно используется операционной системой.

Такая команда может зависнуть на неопределенное время, но вы можете попробовать напрямую проверить вероятные каталоги, чтобы определить, есть ли у вас962181пустые файлы в одном каталоге. Некоторые файловые системы накладывают дополнительные ограничения на количество отдельных записей ниже уровня одного каталога. Это вряд ли то, что вам нужно, любое приложение, где желательно много файлов, также будет лучше обслуживаться с быстрым (многоуровневым индексированным) доступом.


Как бороться с чрезмерным количеством найденных файлов?

Если вы хотите сохранить потенциальный вывод, но вам не нужно сохранять время, когда ранее выполнялось задание cron, вы можете выборочно удалить пустые файлы и продолжить исследование только того, что говорят непустые, например:

# find /root -xdev -maxdepth 1 -type f -size 0 -name "dosomething.php.*" -delete

Как предотвратить повторение проблемы в будущем?

Если вам на самом деле не нужно сохранять результаты всех предыдущих загрузок, рассмотрите возможность указания выходного имени (возможно, даже /dev/null, чтобы не сохранять даже последнюю загрузку), которое будет переопределяться при каждом вызове, в отличие от значения по умолчанию, гдезавитокпросто добавляет номер к имени выходного файла, если он уже существует в каталоге.

* * * * * wget -O /root/latest-something.html https://example.com/something.php >> /var/log/myjob.log 2>&1

Связанный контент