Как обстоит дело с /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.