Как очищается каталог /tmp?

Как /tmp каталог очищен? Это автоматически? Если так, как часто это убирается?

8 ответов

Решение

Заметка! Этот ответ устарел, по крайней мере, с Ubuntu 14.04. Смотрите другие ответы для текущей ситуации, и если они окажутся правильными, то яростно проголосуйте за них. Также оставьте комментарий, чтобы я мог поставить ссылку здесь на текущий правильный ответ.

Для 14.04 см. /questions/125810/kak-ochischaetsya-katalog-tmp/125824#125824

За 16.10 см. /questions/125810/kak-ochischaetsya-katalog-tmp/125825#125825


Старый ответ от 2011 года:

Очистка /tmp делается выскочкой сценария /etc/init/mounted-tmp.conf, Скрипт запускается upstart каждый раз /tmp установлен. Практически это означает при каждой загрузке.

Сценарий выполняет примерно следующее: если файл в /tmp старше чем $TMPTIME дни он будет удален.

Значение по умолчанию $TMPTIME 0, что означает каждый файл и каталог в /tmp удаляется. $TMPTIME переменная среды, определенная в /etc/default/rcS,

Каталог очищается по умолчанию при каждой загрузке, потому что TMPTIME по умолчанию 0

Здесь вы можете изменить время в следующем файле:

/etc/default/rcS

TMPTIME говорит, как часто tmp dir должен очищаться в днях

Я проверяю это на Ubuntu 16.10. Я могу подтвердить, что редактирование / etc / default / rcS больше не имеет никакого эффекта, и файлы в tmp стираются при перезагрузке, независимо от того, что вы вставили в этот файл. Как уже упоминалось, tmpreaper больше не используется.

Я думаю, что правильный ответ заключается в том, что Ubuntu 16.10 имеет новую настройку. Существует папка /etc/tmpfiles.d, документированная на странице руководства "tmpfiles.d". В эту папку необходимо поместить файл конфигурации, чтобы контролировать, нужно ли удалять / tmp. Это то, что я делаю, чтобы мешать перезагрузкам стирать файлы в / tmp, если им не исполнилось 20 дней:

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

Замените "20d" на "-", если вы не хотите, чтобы файлы были удалены. Это мое лучшее усилие, эта страница руководства почти непроницаема с деталями.

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

В то время как /tmp Папка - это не место для долгосрочного хранения файлов, иногда вы хотите хранить вещи немного дольше, чем при следующей перезагрузке, что по умолчанию в системах Ubuntu. Я знаю, раз или два я что-то скачал /tmp во время тестирования перезагрузился после внесения изменений, а затем снова потерял исходные данные. Это можно изменить, если вы хотите сохранить /tmp файлы немного дольше.

Изменение /tmp Частота очистки

Настройка по умолчанию, которая говорит вашей системе очистить /tmp при перезагрузке проходит в /etc/default/rcS файл. Значение, которое мы рассмотрим: TMPTIME,

Текущее значение TMPTIME=0 говорит удалить файлы при перезагрузке, несмотря на возраст файла. Изменение этого значения на другое (положительное) число изменит количество дней, в течение которых файл может сохраняться /tmp,

TMPTIME=7

Этот параметр позволит файлам оставаться в /tmp до тех пор, пока им не исполнится неделя, а затем удалите их при следующей перезагрузке. Отрицательное число (TMPTIME=-1) говорит системе никогда ничего не удалять в /tmp, Это, вероятно, не то, что вы хотите, но доступно.

В Ubuntu 14.04 это делается tmpreaper, который вызывается ежедневно cron (от /etc/cron.daily). Программу можно настроить через /etc/default/rcS а также /etc/tmpreaper.conf,

В systemd Ubuntu (15.10 и новее), это делает systemd, используя systemd-tmpfiles-clean сервис и таймер:

$ systemctl cat systemd-tmpfiles-clean.service 
# /lib/systemd/system/systemd-tmpfiles-clean.service
#  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=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target time-sync.target
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/bin/systemd-tmpfiles --clean
IOSchedulingClass=idle

А также

$ systemctl cat systemd-tmpfiles-clean.timer  
# /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 работает при выключении, и один раз в день в противном случае. Очищаемые файлы могут быть расширены с помощью /etc/tmpfiles.d упоминается в другом ответе.

Вы можете изменить поведение таймера, используя systemctl edit systemd-tmpfiles-clean.timer и используя различные systemd Timer параметры конфигурации (см. man 5 systemd.timer).

До 14.04:

Он очищается каждый раз при перезагрузке.

На одном из наших серверов под управлением Ubuntu у нас есть скрипт для удаления файлов в /tmp, и он работает ночью.

Сценарий:

#!/bin/sh
# Clean file and dirs more than 3 days old in /tmp nightly

/usr/bin/find /tmp -type f -atime +2 -mtime +2  |xargs  /bin/rm -f &&

/usr/bin/find /tmp -type d -mtime +2 -exec /bin/rm -rf '{}' \; &&

/usr/bin/find /tmp -type l -ctime +2 |xargs /bin/rm -f &&

/usr/bin/find -L /tmp -mtime +2 -print -exec rm -f {} \;

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

Другие вопросы по тегам