Как следует / tmp автоматически очищаться в Ubuntu 16.04? [dубликат]

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

269
задан 28 January 2014 в 23:48

14 ответов

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

Для 14.04 см. Https://askubuntu.com/a/759048/1366

Для 16.10 см. [D2] https://askubuntu.com/a/759048/1366

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

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

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

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

175
ответ дан 18 July 2018 в 01:42
[D0] Внимание! Этот ответ устарел с по крайней мере ubuntu 14.04. См. Другие ответы на текущую ситуацию, и если они докажут правильность, то выведите их в ярость. Также отправьте комментарий, чтобы я мог поставить ссылку на текущий правильный ответ.

Для 14.04 см. Https://askubuntu.com/a/759048/1366

Для 16.10 см. [D2] https://askubuntu.com/a/759048/1366

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

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

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

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

175
ответ дан 24 July 2018 в 17:26

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

26
ответ дан 18 July 2018 в 01:42

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

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

/etc/default/rcS

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

134
ответ дан 18 July 2018 в 01:42

В 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 вы можете самостоятельно изменить поведение таймера (см. [D3] другое ответ ).

3
ответ дан 18 July 2018 в 01:42

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

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

25
ответ дан 18 July 2018 в 01:42

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

4
ответ дан 18 July 2018 в 01:42

До 14.04:

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

10
ответ дан 18 July 2018 в 01:42

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

26
ответ дан 24 July 2018 в 17:26
  • 1
    хороший информация. Но в котором скрипт является командой очистки? Я видел /etc/init/mounted-temp.conf, но у него есть строка start on mounted MOUNTPOINT=/tmp, которая заставляет меня думать, что она неприменима. – enzotib 9 January 2011 в 23:56
  • 2
    Если вы не хотите, чтобы файл был удален автоматически, поместите его в /var/tmp вместо /tmp. – Gilles 11 January 2011 в 01:29
  • 3
    Также удобно хранить файлы, которые вы не хотите потерять (визуализированные видеокадры), когда ваша машина выходит из строя, возможно, из-за OOM. Лучшим решением было бы, конечно, решить проблему. :-) – Ken Sharp 8 March 2014 в 20:28
  • 4
    Можно ли это сделать в Cygwin? – CMCDragonkai 14 May 2014 в 13:19
  • 5
    в моей системе tmpreaper не был в /etc/cron.daily - но я смог установить его с помощью apt-get – Joe Germuska 3 November 2017 в 23:46

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

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

/etc/default/rcS

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

134
ответ дан 24 July 2018 в 17:26
  • 1
    Очистка при каждой загрузке не идеальна для машины, которая никогда не перезагружается, как сервер. У меня более 500 000 файлов, занимающих 5 Гб места в моем / tmp, потому что у моего сервера 378 дней работы. Я не хочу перезагружать его, просто потому, что очистка этих файлов при перезагрузке занимает несколько часов. – rjmunro 25 January 2012 в 17:47
  • 2
    В вашем случае вы должны дать шанс tmpreaper. – qbi 25 February 2013 в 05:01
  • 3
    Задача CRON может легко решить эту проблему. – Ken Sharp 8 March 2014 в 20:27
  • 4
    Также tmpwatch должен быть подходящим инструментом. – ArekBulski 28 October 2015 в 16:29
  • 5
    Я с @KenSharp в этом: работа CRON делает трюк для сервера с таким большим временем безотказной работы. См. [D0] askubuntu.com/questions/2368/how-do-i-set-up-a-cron-job – Yuri Sucupira 16 April 2016 в 03:08

В 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 вы можете самостоятельно изменить поведение таймера (см. [D3] другое ответ ).

3
ответ дан 24 July 2018 в 17:26

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

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

25
ответ дан 24 July 2018 в 17:26
  • 1
    [F1] – Martin Schröder 15 April 2017 в 04:52
  • 2
    Я обнаружил, что вы можете сохранить исходные разрешения и владельца файлов, используя дефисы: d /tmp/ - - - 20d – Dave Yarwood 22 May 2018 в 18:38
  • 3
    Также стоит отметить: вы можете проверить свою конфигурацию, выполнив задание на очистку вручную: systemctl start systemd-tmpfiles-clean – Dave Yarwood 22 May 2018 в 18:38

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

4
ответ дан 24 July 2018 в 17:26
  • 1
    Возможно, вам будет лучше использовать tmpwatch . – poolie 28 September 2011 в 09:59
  • 2
    Последняя строка чрезвычайно опасна. Обычно каждый может запускать ln -s /usr /tmp/kaboom или даже ln -s /* /tmp/ ... – Daniel Alder 29 February 2016 в 02:25

До 14.04:

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

10
ответ дан 24 July 2018 в 17:26
  • 1
    Появляется с 14.04+, он использует только tmpreaper, а не «за загрузку». скрипт FWIW – rogerdpack 8 September 2016 в 19:03
  • 2
    Мои системы 14.04 очищаются при перезагрузке. Никогда не слышал о tmpreaper. – Ken Sharp 13 May 2017 в 10:51
  • 3
    что, если вы никогда не перезагружаете систему? – phuclv 5 December 2017 в 15:37

Другие вопросы по тегам:

Похожие вопросы: