Jak /tmp
sprzątany jest katalog? Czy to jest automatyczne? Jeśli tak, to jak często jest sprzątany?
Jak /tmp
sprzątany jest katalog? Czy to jest automatyczne? Jeśli tak, to jak często jest sprzątany?
Odpowiedzi:
Uwaga! Ta odpowiedź jest nieaktualna, ponieważ przynajmniej Ubuntu 14.04. Zobacz inne odpowiedzi na bieżącą sytuację, a jeśli okażą się poprawne, głosuj z wściekłością. Prześlij także komentarz, aby umieścić tutaj link do aktualnej poprawnej odpowiedzi.
14.04 patrz https://askubuntu.com/a/759048/1366
16.10 patrz https://askubuntu.com/a/857154/453746
Stara odpowiedź z 2011 r .:
Czyszczenie /tmp
odbywa się za pomocą skryptu upstart /etc/init/mounted-tmp.conf
. Skrypt jest uruchamiany przy każdym uruchomieniu /tmp
. Praktycznie oznacza to przy każdym rozruchu.
Skrypt wykonuje mniej więcej następujące czynności: jeśli plik w /tmp
starszym wieku niż kilka $TMPTIME
dni, zostanie usunięty.
Domyślna wartość $TMPTIME
to 0, co oznacza, że każdy plik i katalog w nim /tmp
zostanie usunięty. $TMPTIME
jest zmienną środowiskową zdefiniowaną w /etc/default/rcS
.
Katalog jest domyślnie czyszczony przy każdym uruchomieniu, ponieważ TMPTIME
domyślnie jest równy 0.
Tutaj możesz zmienić czas w następującym pliku:
/etc/default/rcS
TMPTIME
mówi, jak często tmp dir powinien być usuwany w ciągu kilku dni
tmpreaper
szansę.
tmpwatch
Powinno też być odpowiednim narzędziem.
Chociaż /tmp
folder nie jest miejscem do przechowywania plików przez dłuższy czas, czasami chcesz zachować trochę więcej czasu niż przy następnym uruchomieniu , co jest domyślne w systemach Ubuntu. Wiem, że raz lub dwa pobrałem coś /tmp
podczas testowania, po wprowadzeniu zmian uruchomiłem ponownie, a następnie ponownie straciłem oryginalne dane. Można to zmienić, jeśli chcesz /tmp
trochę dłużej przechowywać swoje pliki.
Zmiana /tmp
częstotliwości czyszczenia
Domyślne ustawienie, które nakazuje systemowi wyczyścić się /tmp
przy ponownym uruchomieniu, znajduje się w /etc/default/rcS
pliku. Wartość, na którą będziemy patrzeć, to TMPTIME
.
Obecna wartość TMPTIME=0
mówi usuń pliki przy ponownym uruchomieniu, pomimo wieku pliku. Zmiana tej wartości na inną (dodatnią) liczbę spowoduje zmianę liczby dni, przez które plik może przetrwać /tmp
.
TMPTIME=7
To ustawienie pozwoli na pozostanie plików do ukończenia /tmp
tygodnia, a następnie usunie je przy następnym uruchomieniu. Liczba ujemna ( TMPTIME=-1
) informuje system, aby nigdy niczego nie usuwał /tmp
. Prawdopodobnie nie jest to coś, czego chcesz, ale jest dostępne.
/etc/init/mounted-temp.conf
, ale ma linię, start on mounted MOUNTPOINT=/tmp
która sprawia, że uważam, że nie dotyczy.
/var/tmp
zamiast /tmp
.
Sprawdzam to na Ubuntu 16.10. Mogę poświadczyć, że edycja / etc / default / rcS nie ma już żadnego efektu, a pliki w tmp są usuwane przez restart, bez względu na to, co umieścisz w tym pliku. Jak wspominają inni, tmpreaper nie jest już używany.
Myślę, że właściwą odpowiedzią jest to, że Ubuntu 16.10 ma nową konfigurację. Istnieje folder /etc/tmpfiles.d, udokumentowany na stronie podręcznika „tmpfiles.d”. W tym folderze należy umieścić plik konfiguracyjny, aby kontrolować, czy / tmp ma zostać skasowany. Oto, co robię, aby zatrzymać ponowne uruchamianie w celu usunięcia plików w / tmp, chyba że mają one 20 dni:
#/etc/tmpfiles.d/tmp.conf
d /tmp 1777 root root 20d
Zamień „20d” na „-”, jeśli nigdy nie chcesz, aby pliki były usuwane. To jest mój najlepszy wysiłek, że strona podręcznika jest prawie nieprzenikniona ze szczegółami.
Zaletą nowej konfiguracji jest to, że narzędzie do czyszczenia plików może nadal działać, nawet jeśli system nie zostanie ponownie uruchomiony (jak w przypadku zawsze na serwerze). To chyba duży plus.
man tmpfiles.d
d /tmp/ - - - 20d
systemctl start systemd-tmpfiles-clean
W Ubuntu 14.04 odbywa się to przez tmpreaper
, który jest wywoływany codziennie przez cron (from /etc/cron.daily
). Program można skonfigurować za pomocą /etc/default/rcS
i /etc/tmpreaper.conf
.
Jest czyszczony przy każdym ponownym uruchomieniu.
tmpreaper
.
W systemd
Ubuntu (15.10 i nowszych) odbywa się to przez systemd, przy użyciu systemd-tmpfiles-clean
usługi i timera:
$ 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
I
$ 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
Więc systemd-tmpfiles-clean
działa przy wyłączeniu, a raz dziennie inaczej. Pliki, które czyści, można rozszerzyć, używając /etc/tmpfiles.d
wspomnianej w innej odpowiedzi .
Możesz sam zmienić zachowanie timera za pomocą systemctl edit systemd-tmpfiles-clean.timer
i różnych Timer
opcji konfiguracji systemowej (patrz man 5 systemd.timer
).
/tmp
wciąż nie posprzątałem. i muszę to wyczyścić. nawet ręczne uruchomienie sudo systemctl start systemd-tmpfiles-clean
nie załatwia sprawy. Jakieś pomysły dlaczego?
Na jednym z naszych serwerów z Ubuntu mamy skrypt do usuwania plików z katalogu / tmp i działa on co noc.
Skrypt to:
#!/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 {} \;
Po prostu zapisz powyższą zawartość do pliku chmod 775 i stwórz wpis crona, aby go uruchomić. Ponieważ jest to serwer sieciowy, nie chcemy go ponownie uruchamiać z oczywistych powodów.
ln -s /usr /tmp/kaboom
a nawet ln -s /* /tmp/
...
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
/ etc / fstab.