🐧 Автоматическое удаление неиспользуемых временных файлов на Linux

by itisgood

В этой статье вы узнаете, как systemd timer, управляющий временными файлами.

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

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

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

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

Изменяемые означает, что файлы существуют только в памяти.

Если система перезагружается или происходит сбой питания, все содержимое энергозависимого хранилища будет удалено.

Как автоматически очищать неиспользуемые временные файлы в Linux

В Red Hat Enterprise Linux 7 и новее включен новый инструмент под названием systemd-tmpfiles.

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

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

$ systemctl status  systemd-tmpfiles-*
● systemd-tmpfiles-setup.service - Create Volatile Files and Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-setup.service; static; vendor preset: disabled)
   Active: active (exited) since Mon 2020-02-10 08:27:50 EAT; 1 weeks 3 days ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)
  Process: 794 ExecStart=/usr/bin/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev (code=exited, status=0/SUCCESS)
 Main PID: 794 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/systemd-tmpfiles-setup.service

Feb 10 08:27:50 envoy-nginx.novalocal systemd[1]: Starting Create Volatile Files and Directories...
Feb 10 08:27:50 envoy-nginx.novalocal systemd[1]: Started Create Volatile Files and Directories.

● systemd-tmpfiles-setup-dev.service - Create Static Device Nodes in /dev
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-setup-dev.service; static; vendor preset: disabled)
   Active: active (exited) since Mon 2020-02-10 08:27:49 EAT; 1 weeks 3 days ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)
  Process: 553 ExecStart=/usr/bin/systemd-tmpfiles --prefix=/dev --create --boot (code=exited, status=0/SUCCESS)
 Main PID: 553 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/systemd-tmpfiles-setup-dev.service

Feb 10 08:27:49 envoy-nginx.novalocal systemd[1]: Starting Create Static Device Nodes in /dev...
Feb 10 08:27:49 envoy-nginx.novalocal systemd[1]: Started Create Stati
Когда сервисный модуль systemd-tmpfiles-setup запускается, он запускает команду systemd-tmpfiles –create –remove.
Команда проверяет файлы конфигурации из:
  • /usr/lib/tmpfiles.d/.conf
  • /run/tmpfiles.d/.conf
  • /etc/tmpfiles.d/*.conf
Если в указанных выше файлах конфигурации есть файлы и каталоги, помеченные для удаления, они будут удалены.
Файлы и каталоги, помеченные для создания создаются с правильными разрешениями, если это необходимо.

Как очистить временные файлы с помощью Systemd Timer

Модуль systemd timer с именем systemd-tmpfiles-clean.timer регулярно запускает службу systemd-tmpfiles-clean.service, которая затем выполняет команду systemd-tmpfiles –clean.

Вы будете указывать, как часто сервис должен запускаться в разделе [Timer].

Смотрите пример, показанный ниже.

$ cat /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
В приведенном выше примере systemd-tmpfiles-clean.service будет запущен через 15 минут после загрузки системы.
Любой другой запуск происходит через 24 часа после последнего запуска службы.

Вы можете настроить значения по своему усмотрению.

Если вы вносите изменения, убедитесь, что вы перезагрузили сервис.

sudo systemctl daemon-reload
sudo systemctl enable --now systemd-tmpfiles-clean.timer

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

Давайте настроим systemd-tmpfiles для очистки каталога /mytmp.

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

Вы можете скопировать пример файла конфигурации и обновить его – /usr/lib/tmpfiles.d/tmp.conf

Отредактируйте файл как показано ниже.

$ sudo vim /etc/tmpfiles.d/mytmp.conf
See tmpfiles.d(5) for details
# Clear tmp directories separately, to make them easier to override
q /mytmp 1777 root root 3d
Если вы хотите убедиться, что каталог существует с правильно назначенным владельцем, создайте конфигурацию, как показано ниже.
d /run/mytmp 0700 root root 60s

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

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

sudo systemd-tmpfiles --create /etc/tmpfiles.d/mytmp.conf
Если вы не видите никаких ошибок в выводе, это подтверждает правильность настроек конфигурации.
Вы можете вызвать ручную очистку в любое время с помощью команды:
systemd-tmpfiles --clean /etc/tmpfiles.d/mytmp.conf
Обратитесь к следующим справочным страницам для получения более подробной информации.
  • tmpfiles.d (5)
  • systemd-tmpfiles (8),
  • systemd.timer (5)

 

You may also like

Leave a Comment