Вопрос или проблема
У нас есть набор из 5 серверов Ubuntu (текущая версия 22.04
), которые используются для выполнения процессов сбора информации с экранов, и они генерируют много файлов в каталоге /tmp
. Через пару недель они могут занять все доступное дисковое пространство на сервере, что приведет к его отключению.
Чтобы бороться с этим, я пытался использовать tmpreaper для очистки каталога /tmp
на ежедневной основе, но по какой-то причине мне не удается действительно очистить файлы в каталоге. Он был установлен достаточно легко, и у меня есть конфигурационный файл (/etc/tmpreaper.conf
) с такими настройками:
TMPREAPER_TIME=1d
TMPREAPER_PROTECT_EXTRA='/tmp/systemd-private*'
TMPREAPER_DIRS='/tmp/.'
TMPREAPER_DELAY='256'
TMPREAPER_ADDITIONALOPTIONS='--all'
Я проверил, что /etc/tmpreaper
исполняемый. Чего мне может не хватать, чтобы файлы в /tmp не очищались?
И если я не могу заставить это работать, есть ли какие-нибудь хорошие альтернативы, кроме написания собственного скрипта bash?
Ответ или решение
Для решения задачи очистки директории /tmp
на серверах Ubuntu версии 22.04, первым делом необходимо разобраться, почему не работает установленная вами утилита tmpreaper, а затем рассмотреть возможные альтернативы.
Теория (Theory)
tmpreaper
— это утилита, предназначенная для удаления устаревших файлов в заданной директории, обычно используемой для очистки временных файлов в системах Linux. Вы уже прошли базовую настройку конфигурационного файла /etc/tmpreaper.conf
, указав параметры, такие как время хранения файлов (TMPREAPER_TIME=1d
), дополнительные директории для защиты (TMPREAPER_PROTECT_EXTRA='/tmp/systemd-private*'
), настроив директории для очистки и дополнительные опции.
Есть несколько причин, по которым tmpreaper
может не работать должным образом:
- Неправильные права доступа: Убедитесь, что у
tmpreaper
есть достаточные права для выполнения операции удаления файлов в/tmp
. - Планировщик задач: Проверьте, настроено ли выполнение
tmpreaper
черезcron
или другой планировщик задач. Поскольку вы используете параметр1d
, убедитесь, что задача запускается ежедневно. - Логи и ошибки: Проверьте журналы системы, чтобы выяснить наличие ошибок при выполнении
tmpreaper
. Это может дать представление о том, где проблема. - Файлы защищены от удаления: Возможно, файлы, которые вы ожидаете удалить, защищены по иным причинам, не предусмотренным вашими настройками.
Пример (Example)
Для более глубокой диагностики, попробуйте следующее:
-
Вручную запустите
tmpreaper
с аналогичными параметрами и проверьте, какие ошибки выводятся:sudo /usr/sbin/tmpreaper --test 1d /tmp
Параметр
--test
позволит понять, какие файлы будут удалены без непосредственного их удаления. -
Просмотрите журнал системных сообщений, который может содержать информацию о запуске
tmpreaper
:sudo journalctl -xe | grep tmpreaper
-
Проверьте конфигурацию cron:
sudo crontab -l
Или проверьте соответствующий файл в
/etc/cron.daily
или/etc/cron.d/
.
Применение (Application)
Если tmpreaper
не подходит вам, рассмотрите следующие альтернативы:
-
logrotate: Это инструмент, традиционно используемый для ротации журналов, но он также может быть настроен для удаления устаревших файлов в
/tmp
. Вот пример конфигурации:/tmp/* { daily missingok rotate 0 maxage 1 nocompress }
Вместо ротации вы просто удаляете файлы старше одного дня.
-
systemd-tmpfiles: Современные версии Ubuntu используют systemd, который предоставляет утилиту для управления временными файлами. Создайте конфигурационный файл, например,
/etc/tmpfiles.d/tmp.conf
:d /tmp 1777 root root 1d
Он удалит файлы старше одного дня, сохраняя права доступа и владельцев.
-
Скрипт Bash: Если вы предпочитаете писать собственные инструменты, то создайте cron-задание для исполнения скрипта:
#!/bin/bash find /tmp -type f -mtime +1 -exec rm -f {} \;
Добавьте его в cron:
0 0 * * * /path/to/your/script.sh
Каждое из этих решений имеет свои преимущества и недостатки, поэтому выбор зависит от ваших специфических потребностей и приоритетов. Однако, с учетом предоставленных альтернатив, есть возможность выбрать подходящее решение без написания нового кода, если это не является приоритетом.