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


Как /tmp очищен ли каталог? Автоматически? Если да, то как часто он очищается?


261
2018-01-09 19:26


Источник


Мои временные файлы никогда не записываются на диск. Они записываются на RAM-диск. Я поставил tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 в / etc / fstab. - Anonymous


Ответы:


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

Для 14.04 см. https://askubuntu.com/a/759048/1366

В 16.10 см. https://askubuntu.com/a/857154/453746


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

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

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

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


175
2018-01-10 00:17



Это не так для 14.04 (скрипт больше не существует). - Martin Schröder
@Martin Schröder - скрипт существует в моей системе, и это чистая установка 14.04 и tmpreaper не существует! - Lance Holland
Я использую arch linux сейчас, поэтому я не могу проверить. Сожалею. Пожалуйста, кто-то проверяет это и комментирует или редактирует мой ответ. - lesmana
в ubuntu 16.04 tmpreaper заброшен как незащищенный, см.: fossies.org/linux/tmpreaper/debian/README.security - Tamerlaha


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

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

/etc/default/rcS

TMPTIME говорит, как часто tMP-файл может быть очищен в днях


134
2018-01-09 19:35



Очистка при каждой загрузке не идеальна для машины, которая никогда не перезагружается, как сервер. У меня более 500 000 файлов, занимающих 5 Гб места в моем / tmp, потому что у моего сервера 378 дней работы. Я не хочу перезагружать его, просто потому, что очистка этих файлов при перезагрузке занимает несколько часов. - rjmunro
В вашем случае вы должны дать tmpreaper шанс. - qbi
Задача CRON может легко решить эту проблему. - Ken Sharp
Также tmpwatch должен быть подходящим инструментом. - ArekBulski
Я с @KenSharp в этом: работа CRON делает трюк для сервера с таким большим временем безотказной работы. Видеть askubuntu.com/questions/2368/how-do-i-set-up-a-cron-job - Yuri Sucupira


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

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

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

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

TMPTIME=7

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


58
2018-01-09 19:35



хороший информация. Но в котором скрипт является командой очистки? я видел /etc/init/mounted-temp.conf, но он имеет линию start on mounted MOUNTPOINT=/tmp что заставляет меня думать, что это неприменимо. - enzotib
Если вы не хотите, чтобы файл был удален автоматически, поместите его в /var/tmp вместо /tmp, - Gilles
Также удобно хранить файлы, которые вы не хотите потерять (визуализированные видеокадры), когда ваша машина выходит из строя, возможно, из-за OOM. Лучшим решением было бы, конечно, решить проблему. :-) - Ken Sharp
Можно ли это сделать в Cygwin? - CMCDragonkai


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


26
2018-04-19 12:00



в моей системе tmpreaper не был в /etc/cron.daily - но я смог установить его с помощью apt-get - Joe Germuska


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

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

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

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

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


25
2017-12-05 04:10



man tmpfiles.d - Martin Schröder
Я обнаружил, что вы можете сохранить исходные разрешения и владельца файлов, используя дефисы: d /tmp/ - - - 20d - Dave Yarwood
Также стоит отметить: вы можете проверить свою конфигурацию, выполнив задание на очистку вручную: systemctl start systemd-tmpfiles-clean - Dave Yarwood


До 14.04:

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


10
2018-01-09 19:34



Появляется с 14.04+, он использует только tmpreaper, а не скрипт «per boot» FWIW - rogerdpack
Мои системы 14.04 очищаются при перезагрузке. Никогда не слышал о tmpreaper, - Ken Sharp
что, если вы никогда не перезагружаете систему? - phuclv


На одном из наших серверов под управлением 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, чтобы запустить его. Поскольку это веб-сервер, мы не хотим перезагружать его по понятным причинам.


4
2017-09-28 04:54



Возможно, вам лучше использовать tmpwatch, - poolie
Последняя строка чрезвычайно опасна. Обычно каждый может запускать ln -s /usr /tmp/kaboom или даже ln -s /* /tmp/ ... - Daniel Alder


В 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).


3
2017-12-06 17:11