Как правильно удалять временные файлы

У меня OpenSuSe 11.2 живет уже довольно долго, и пока что ее менять ни на что не собираюсь. Однако в директории /tmp скапливается очень много временных файлов, которые система по умолчанию чистить не хочет. Я уж подумывал над написанием скрипта, который бы при перезагрузке очищал бы содержимое /tmp, но как оказалось, это был бы неправильный подход к решению проблемы.

В системе для этого предусмотрен совсем другой механизм. В Yast имеется редактор /etc/sysconfig, в котором можно настроить периодичность очистки временных файлов, а так же список директорий с временными файлами. Если компьютер с OpenSuSe используется как десктоп, то очистки /tmp при перезагрузке вполне достаточно. Если же он месяцами не перезагружается, то настройка должна быть более тонкой.

В редакторе /etc/sysconfig внутри ветки System => Cron есть специальные переменные, которые все это регулируют. Мои настройки выглядят так:

MAX_DAYS_IN_TMP = 100
MAX_DAYS_IN_LONG_TMP = 100
TMP_DIRS_TO_CLEAR = /tmp
LONG_TMP_DIRS_TO_CLEAR = /var/tmp
OWNER_TO_KEEP_IN_TMP = root
CLEAR_TMP_DIRS_AT_BOOTUP = yes

Пишу в основном для себя, чтобы не забыть. Но если кому-то пригодится, буду рад.

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

  1. CLEAR_TMP_DIRS_AT_BOOTUP = yes
    Перекрывает все остальные настройки, при любой перезагрузке очищает полностью то что указано в “TMP_DIRS_TO_CLEAR”.
    Поэтому либо все остальные настройки этого файла, либо CLEAR_TMP_DIRS_AT_BOOTUP = yes

  2. Так и задумано. Если я перегружаю машину, /tmp будет очищена.
    В противном случае дольше заданного времени они не проживут (а я поставил там 100 дней), не хочу внезапно потерять текщую сессию X-сервера из-за удаления временных файлов.

  3. MAX_DAYS_IN_TMP указывает максимальное количество дней, когда не было обращений к файлу, который подлежит удалению. В скрипте /etc/cron.daily/suse.de-clean-tmp
    происходит проверка через
    find $DIR/. $OMIT ! -type d ! -type s ! -type p -atime +$MAX_DAYS -exec /usr/bin/safe-rm {} \;
    где
    $OMIT = Все пользователи, кроме указаных в OWNER_TO_KEEP_IN_TMP
    $DIR = каталоги указаные в TMP_DIRS_TO_CLEAR и LONG_TMP_DIRS_TO_CLEAR
    $MAX_DAYS = MAX_DAYS_IN_TMP и MAX_DAYS_IN_LONG_TMP соответственно.
    Тоесть будут удалены все файлы которые не являются директориями, сокетами, именоваными каналами, не пренадлежат пользователям указаным в OWNER_TO_KEEP_IN_TMP, и имеют время последнего обращения больше указанного в MAX_DAYS_IN_TMP.

    Так как сессия X-сервера пренадлежит root-у, то эти файлы не могут быть удалены, пользователь root указан в OWNER_TO_KEEP_IN_TMP.

    Исходя из выше сказанного повторюсь, – нет смысла настраивать все переменные, для компьютера который регулярно перезагружается, если явно указываем CLEAR_TMP_DIRS_AT_BOOTUP = yes.
    Для сервера нет смысла ставить CLEAR_TMP_DIRS_AT_BOOTUP = yes, зато удобнее настроить остальные переменные.

  4. Судя по комментарию, у тебя runlevel = 5 ?

    У меня не так, у меня runlevel = 3. Т.е. сервер стартует без X. И если я логинюсь под пользователем, и набираю startx, то сессия X у меня запускается от пользователя, а не от рута.

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

Обсуждение закрыто.