Planetahost VPS
Перейти к основному контенту

Как настроить автоматическую очистку временных файлов

intro-How-to-set-up-automatic-cleanup-of-temporary-files-planetahost.png

Подробности урока
Уровень сложности Лёгкий
Права root Требуются
Требования Терминал Linux
Категория Настройка ПО
Совместимость с ОС Debian, Ubuntu
Примерное время чтения 30 мин

Введение

В Linux для временных файлов используются каталоги /tmp и /var/tmp. Со временем в них могут накапливаться старые файлы, созданные приложениями, установщиками и различными системными службами.

Для автоматического управления такими файлами в системах с systemd используется systemd-tmpfiles. С его помощью можно задавать правила удаления старых файлов и каталогов без необходимости писать собственные скрипты и задания cron.

В этой статье рассмотрим, чем отличаются /tmp и /var/tmp, как посмотреть действующие правила и настроить автоматическую очистку.

Временные каталоги

Основные каталоги для временных файлов:

Каталог Назначение Особенности
/tmp Кратковременные временные файлы Содержимое можно очищать после перезагрузки
/var/tmp Временные файлы, которым требуется больше времени Файлы могут сохраняться между перезагрузками

Разница заключается прежде всего в сроке хранения данных.

/tmp предназначен для файлов, которые нужны системе и приложениям в течение относительно короткого времени.

/var/tmp используется для временных данных, которые могут потребоваться дольше и поэтому не должны обязательно удаляться при каждой перезагрузке.

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

systemd-tmpfiles

За управление временными файлами отвечает служба и набор утилит systemd-tmpfiles.

Посмотреть доступные правила можно с помощью:

cat /usr/lib/tmpfiles.d/tmp.conf

изображение.png

В этом файле всего два правила:

q /tmp 1777 root root 10d
q /var/tmp 1777 root root 30d

Они задают автоматическую очистку двух временных каталогов.

  • q - тип правила systemd-tmpfiles, который управляет каталогом и его содержимым.
  • /tmp - обычный каталог для временных файлов.
  • /var/tmp - каталог для временных файлов, которые могут храниться дольше.
  • 1777 - права доступа к каталогу. Все пользователи могут создавать там файлы, но удалить чужой файл может только его владелец или root.
  • root root - владелец и группа каталога.
  • 10d - файлы в /tmp, которые старше 10 дней, подлежат очистке.
  • 30d - файлы в /var/tmp, которые старше 30 дней, подлежат очистке.

То есть конкретно в твоей системе /tmp очищается по сроку 10 дней, а /var/tmp - по сроку 30 дней.

В Debian и других дистрибутивах также могут использоваться дополнительные правила из каталогов:

/usr/lib/tmpfiles.d/
/etc/tmpfiles.d/
/run/tmpfiles.d/

Системные правила обычно находятся в /usr/lib/tmpfiles.d/, а собственные правила администратора следует размещать в /etc/tmpfiles.d/.

Как работает очистка

Для автоматической очистки используется таймер:

systemd-tmpfiles-clean.timer

Он периодически запускает:

systemd-tmpfiles-clean.service

Саму очистку выполняет:

systemd-tmpfiles --clean

При запуске --clean systemd-tmpfiles анализирует правила очистки и удаляет файлы, возраст которых превышает установленный срок.

Таким образом, постоянно запускать systemd-tmpfiles --clean вручную не требуется.

Проверка текущих правил

Чтобы посмотреть, какие правила очистки применяются к временным каталогам, выполните:

systemd-tmpfiles --cat-config

Команда покажет объединённую конфигурацию из доступных каталогов.

изображение.png

Для поиска правил, связанных с /tmp и /var/tmp, удобно использовать:

systemd-tmpfiles --cat-config | grep -E '/tmp|/var/tmp'

изображение.png

Также можно проверить состояние таймера, который периодически запускает очистку:

systemctl status systemd-tmpfiles-clean.timer

Если таймер работает, будет отображаться информация о последнем и следующем запуске.

Проверить его состояние без подробного вывода можно так:

systemctl is-enabled systemd-tmpfiles-clean.timer
systemctl is-active systemd-tmpfiles-clean.timer

Создание собственного правила

Собственные правила рекомендуется создавать в /etc/tmpfiles.d/.

Например:

nano /etc/tmpfiles.d/custom-tmp.conf

Допустим, необходимо удалять файлы из /tmp, которые не использовались более 7 дней:

d /tmp 1777 root root 7d

Здесь:

  • d - каталог;

  • /tmp - каталог, к которому применяется правило;

  • 1777 - права доступа;

  • root root - владелец и группа;

  • 7d - срок хранения файлов.

Однако для стандартного /tmp не стоит без необходимости создавать собственное правило, если подходящее правило уже существует в конфигурации системы.

Пример собственного правила

Например, создадим отдельное правило для очистки временного каталога приложения:

nano /etc/tmpfiles.d/myapp.conf

Добавим:

d /var/tmp/myapp 0755 root root 14d

Создадим каталог:

systemd-tmpfiles --create

Теперь содержимое /var/tmp/myapp, которое старше 14 дней, будет удаляться во время плановой очистки.

Проверить наличие правила можно:

systemd-tmpfiles --cat-config | grep myapp

изображение.png

Где хранить собственные правила

Для администратора основным каталогом является:

/etc/tmpfiles.d/

Не рекомендуется изменять файлы непосредственно в:

/usr/lib/tmpfiles.d/

Такие файлы принадлежат установленным пакетам и могут быть перезаписаны при обновлении системы.

Собственные правила лучше создавать отдельными файлами в /etc/tmpfiles.d/.

Например:

/etc/tmpfiles.d/myapp.conf

Это позволяет легко управлять собственными настройками и не затрагивать стандартную конфигурацию системы.

Очистка /var/tmp

Для /var/tmp можно создать отдельное правило.

Например:

d /var/tmp 1777 root root 30d

В этом случае файлы в /var/tmp, которые старше 30 дней, будут удаляться при выполнении очистки.

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

Как применить правила

После создания или изменения файла в /etc/tmpfiles.d/ можно выполнить:

systemd-tmpfiles --clean

При необходимости создать каталоги и применить остальные параметры правил можно использовать:

systemd-tmpfiles --create

После изменения конфигурации перезапускать systemd или перезагружать сервер не требуется.

Важный момент с /tmp

Не следует просто добавлять в cron команду вроде:

rm -rf /tmp/*

Такой способ хуже systemd-tmpfiles, поскольку он не учитывает возраст файлов и может удалить данные, которые в данный момент используются приложениями. Кроме того, конструкция /tmp/* не учитывает скрытые файлы и каталоги.systemd-tmpfiles предназначен именно для контролируемого удаления временных данных по заданным правилам.

Проверка таймера

Убедиться, что автоматическая очистка включена, можно командой:

systemctl status systemd-tmpfiles-clean.timer

изображение.png

Если таймер отключён, его можно включить:

systemctl enable --now systemd-tmpfiles-clean.timer

Проверить расписание:

systemctl list-timers systemd-tmpfiles-clean.timer

В выводе будет указано время последнего и следующего запуска.

Полезные команды

Основные команды для работы с systemd-tmpfiles:

Показать все действующие правила.

systemd-tmpfiles --cat-config

Запустить очистку вручную.

systemd-tmpfiles --clean

Создать каталоги и применить соответствующие правила.

systemd-tmpfiles --create

Проверить таймер автоматической очистки.

systemctl status systemd-tmpfiles-clean.timer

Посмотреть расписание запуска.

systemctl list-timers systemd-tmpfiles-clean.timer

Заключение

systemd-tmpfiles позволяет автоматически управлять временными файлами без дополнительных скриптов и заданий cron. В большинстве случаев достаточно стандартных правил, которые уже поставляются с системой. Если требуется изменить срок хранения файлов или добавить очистку собственного каталога, правила можно создать в /etc/tmpfiles.d/. Такой подход удобнее и безопаснее ручного удаления содержимого /tmp и /var/tmp, поскольку система учитывает заданный срок хранения файлов.

Полезные ссылки