Как настроить автоматическую очистку временных файлов
| Подробности урока | |
|---|---|
| Уровень сложности | Лёгкий |
| Права 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
В этом файле всего два правила:
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
Команда покажет объединённую конфигурацию из доступных каталогов.
Для поиска правил, связанных с /tmp и /var/tmp, удобно использовать:
systemd-tmpfiles --cat-config | grep -E '/tmp|/var/tmp'
Также можно проверить состояние таймера, который периодически запускает очистку:
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
Где хранить собственные правила
Для администратора основным каталогом является:
/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
Если таймер отключён, его можно включить:
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, поскольку система учитывает заданный срок хранения файлов.
Полезные ссылки
- Документация systemd-tmpfiles - описание правил
tmpfiles.dи их параметров. - systemd-tmpfiles - справка по команде
systemd-tmpfiles. - systemd.timer - документация по таймерам systemd.
- Debian Wiki: systemd - информация о systemd в Debian.





