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

247

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

задан Olivier Lalonde 09.01.2011 в 20:26
источник

8 ответов

171

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

В 14.04 см. Ссылка

Для 16.10 см. Ссылка

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

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

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

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

    
ответ дан lesmana 10.01.2011 в 01:17
источник
133

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

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

/etc/default/rcS

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

    
ответ дан Max Ruf 09.01.2011 в 20:35
источник
57

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

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

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

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

TMPTIME=7

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

    
ответ дан hhlp 09.01.2011 в 20:35
источник
26

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

    
ответ дан Martin Schröder 19.04.2016 в 14:00
источник
15

Я проверяю это на 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» на «-», если вы никогда не хотите, чтобы файлы были удалены. Это мое лучшее усилие, что страница руководства почти непроницаема деталями.

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

    
ответ дан pauljohn32 05.12.2016 в 05:10
источник
10

До 14.04:

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

    
ответ дан Utku Demir 09.01.2011 в 20:34
источник
4

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

ответ дан Paul 28.09.2011 в 06:54
источник
2

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

ответ дан muru 06.12.2017 в 18:11
источник

Ознакомьтесь с другими вопросами по меткам