2

У меня есть задание cron, которое записывает логи в /tmp . Я хочу автоматически удалять самые старые файлы, когда свободное место на диске становится меньше 1 ГБ.

Я пытаюсь сделать df -ah /tmp а затем взять на 2 - й линии, использовать cut , чтобы получить столбец avail Затем в цикле for продолжайте удалять файлы старше n дней с параметром -mtime пока не будет достаточно свободного места.

Я, вероятно, хочу настроить это как работу cron, которая также выполняется ежедневно.

1 ответ1

1

Вместо find -mtime выполните ls -t, например:

DIR=/tmp
FREESPACE=1000000
find $DIR -type f | xargs ls -1rt | while read f ; do
  if [ `df --output=avail $DIR | tail -1` -ge $FREESPACE ] ; then
    break
  fi
  # rm -f $f
done

Раскомментируйте rm -f $f чтобы он действительно работал ...

Тем не менее, я обычно делал бы вещи немного по-другому. Я бы поместил свои журналы cron в /var /log и позволил что-то вроде logrotate обрабатывать дисковое пространство. Или в качестве другой альтернативы, я бы поместил журналы в отдельный подкаталог, такой как /tmp /mycronjob /*, а затем оставил бы фиксированное количество дней в файлах журналов. Это не так гибко, как мониторинг дискового пространства, но это также прямая find /tmp/mycronjob -mtime +30 -exec rm {} \; и более предсказуемо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .