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

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

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

За 14.04 смотрите https://askubuntu.com/a/759048/1366

Для 16.10 см. https://askubuntu.com/a/857154/453746


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

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

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

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

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

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

/etc/default/rcS

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

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

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

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

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

TMPTIME=7

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

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

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

#/etc/tmpfiles.d/tmp.confd /tmp 1777 root root 20d

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

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

В 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 DirectoriesDocumentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)DefaultDependencies=noConflicts=shutdown.targetAfter=local-fs.target time-sync.targetBefore=shutdown.target[Service]Type=oneshotExecStart=/bin/systemd-tmpfiles --cleanIOSchedulingClass=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 DirectoriesDocumentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)[Timer]OnBootSec=15minOnUnitActiveSec=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 для его запуска. Поскольку это веб-сервер, мы не хотим его перезагружать по очевидным причинам.

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

Связанные: linux - When does /tmp get cleared? - Server Fault