Когда именно tmpwatch удаляет файлы, которые я помещаю в / tmp?

14

CentOS 6.x

Я не понимаю, когда именно файлы, которые я помещаю в / tmp /, удаляются.

/etc/cron.daily/tmpwatch имеет следующее:

#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
        -X '/tmp/hsperfdata_*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
        /usr/sbin/tmpwatch "$flags" -f 30d "$d"
    fi
done

Раздел в строке 5, который гласит, -X '/tmp/hsperfdata_*' 10d /tmpзаставляет меня поверить, что файлы, которые я помещаю в / tmp /, останутся на 10 дней (при условии, что они, конечно, не заблокированы во время удаления или каталог смонтирован в файловой системе tmpfs).

Это верно?

Майк Б
источник

Ответы:

8

В CentOS 6 может показаться, что tmpwatchоно основано на решении удалить, когда к файлу последний раз обращались (atime). Если прошло 10 дней (10 дней) или более, он будет удален при tmpwatchзапуске.

Со tmpwatchстраницы руководства :

    By  default,  tmpwatch  dates  files  by their atime (access time), not 
    their mtime (modification time). If files aren't being removed when 
    ls -l implies they should be, use ls -u to examine their atime to see if 
    that explains the problem.

Также со страницы руководства:

    The time parameter defines the threshold for removing files.  If the
    file has not been accessed for time, the file is removed.  The time 
    argument is a number with an optional single-character suffix specifying 
    the units: m for minutes, h for hours, d for days.  If no  suffix  is 
    specified, time is in hours.
SLM
источник
6

На RHEL7 / CENTOS7 есть цель systemd, которая выполняется ежедневно: systemd-tmpfiles-clean.timer(для замены /etc/cron.daily/tmpwatch). Значения по умолчанию оба OnBootSec=15minи OnUnitActiveSec=1d. Цитирование mand страницы systemd.timer :

OnBootSec = определяет таймер относительно времени загрузки машины.

OnUnitActiveSec = определяет таймер относительно того, когда модуль, активирующий таймер, был активирован в последний раз.

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

Для истории запустите:

$ journalctl  -u systemd-tmpfiles-clean
Mar 12 21:44:17 c7.klabs.be systemd[1]: Starting Cleanup of Temporary Directories...
Mar 12 21:44:18 c7.klabs.be systemd[1]: Started Cleanup of Temporary Directories.

Где «Начала очистка» на самом деле означает «Завершено».

Франклин Пиат
источник
У tmpwatch есть хорошая возможность использования fuser. Может ли версия systemd сделать это?
CMCDragonkai
2
@CMCDragonkai, В апреле 2015 года Леннарт Поеттеринг (разработчик SystemD) сказал в списке рассылки systemd-devel : «Мы не поддерживаем это [..] повторение через / proc просто слишком плохо. [..] мы могли бы рассмотреть это [в противном случае ] " Затем он добавил " atime проверок [..] должно быть вполне достаточно. У вас есть случай, когда их нет? "
Франклин Пят
Да, я задал этот вопрос.
CMCDragonkai
1
@CMCDragonkai, я цитировал Леннарта Поэттеринга в списке рассылки. Ответь ему (в списке)!
Франклин Пят