Как /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
. Скрипт запускается upstart при каждом /tmp
монтировании. Практически это означает при каждой загрузке.
Сценарий выполняет примерно следующее: если файл /tmp
старше, чем $TMPTIME
дни, он будет удален.
Значение по умолчанию равно $TMPTIME
0, что означает, что каждый файл и каталог в нем /tmp
удаляются. $TMPTIME
переменная среды, определенная в /etc/default/rcS
.
Каталог очищается по умолчанию при каждой загрузке, потому что TMPTIME
по умолчанию 0.
Здесь вы можете изменить время в следующем файле:
/etc/default/rcS
TMPTIME
говорит, как часто tmp dir должен очищаться в днях
tmpreaper
шанс.
tmpwatch
должен быть соответствующий инструмент.
Хотя /tmp
папка не предназначена для долгосрочного хранения файлов, иногда вы хотите хранить ее немного дольше, чем при следующей перезагрузке , что по умолчанию в системах Ubuntu. Я знаю, что раз или два я загружал что-то во /tmp
время тестирования, перезагружал после внесения изменений, а затем снова терял исходные данные. Это можно изменить, если вы хотите, чтобы ваши /tmp
файлы были немного дольше.
Изменение /tmp
частоты очистки
Параметр по умолчанию, который указывает вашей системе очистить /tmp
при перезагрузке, хранится в /etc/default/rcS
файле. Значение , которое мы будем смотреть на это TMPTIME
.
Текущее значение TMPTIME=0
говорит об удалении файлов при перезагрузке, несмотря на возраст файла. Изменение этого значения на другое (положительное) число изменит количество дней, в течение которых файл может выжить /tmp
.
TMPTIME=7
Этот параметр позволит файлам оставаться /tmp
до тех пор, пока им не исполнится неделя, а затем удалит их при следующей перезагрузке. Отрицательное число ( TMPTIME=-1
) указывает системе никогда ничего не удалять в /tmp
. Это, вероятно, не то, что вы хотите, но доступно.
/etc/init/mounted-temp.conf
, но у этого есть линия, start on mounted MOUNTPOINT=/tmp
которая заставляет меня думать, что это не применимо.
/var/tmp
вместо /tmp
.
Я проверяю это на 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» на «-», если вы не хотите, чтобы файлы были удалены. Это мое лучшее усилие, эта страница руководства почти непроницаема с деталями.
Преимущество новой настройки заключается в том, что очиститель файлов все еще может работать, даже если система не перезагружается (как в случае всегда на сервере). Это большой плюс, я думаю.
man tmpfiles.d
d /tmp/ - - - 20d
systemctl start systemd-tmpfiles-clean
В Ubuntu 14.04 это делается с помощью tmpreaper
ежедневного cron (from /etc/cron.daily
). Программу можно настроить через /etc/default/rcS
и /etc/tmpreaper.conf
.
Он очищается каждый раз при перезагрузке.
tmpreaper
.
В 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
, используя различные Timer
параметры конфигурации systemd (см. man 5 systemd.timer
).
/tmp
до сих пор не убрали. и мне нужно его почистить. даже ручной запуск sudo systemctl start systemd-tmpfiles-clean
не помогает. Есть идеи почему?
На одном из наших серверов под управлением 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 для его запуска. Поскольку это веб-сервер, мы не хотим его перезагружать по понятным причинам.
ln -s /usr /tmp/kaboom
или даже ln -s /* /tmp/
...
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
в / etc / fstab.