Як /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 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 майже не була непроникною з деталями.
Перевага нового налаштування полягає в тому, що очищувач файлів все ще може працювати, навіть якщо система не перезавантажується (як у випадку із сервером, який завжди знаходиться на сервері). Думаю, це великий плюс.
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-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
параметри конфігурації системи (див. 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.