2009-02-11 12 views
6

Umieszczę niektóre pliki w/tmp na serwerze WWW, który jest używany przez aplikację internetową przez ograniczony czas. Jeśli pliki zostaną pozostawione w serwerze/tmp po tym, jak użytkownik zrezygnuje z używania aplikacji i dzieje się to wielokrotnie, czy powinienem się martwić o zapełnianie katalogu? Czytam w Internecie, że ponowne uruchomienie wyczyści katalog/tmp, ale to pole nie zostanie bardzo szybko uruchomione.Czy/tmp w Linuksie kiedykolwiek się zapełnia?

Tom

Odpowiedz

17

Tak, to się wypełni. Rozważ wdrożenie zadania cron, które po pewnym czasie usunie stare pliki.

Coś jak to powinno załatwić sprawę:

/usr/bin/find /tmp/mydata -type f -atime +1 -exec rm -f {} \; 

Spowoduje to usunięcie plików, które mają czas modyfikacji To więcej niż jeden dzień życia.

lub jako wejścia crontab:

# run five minutes after midnight, every day 
    5 0 * * *  /usr/bin/find /tmp/mydata -type f -atime +1 -exec rm -f {} \; 

gdzie/tmp/mydata jest podkatalogu gdzie aplikacja przechowuje swoje pliki tymczasowe. (Po prostu usuwanie starych plików w/tmp byłoby bardzo złym pomysłem, jak to ktoś inny wskazał tutaj.)

Spójrz na crontab i znajdź strony podręcznika dla szczegółów. Nie uruchamiaj skryptów, które usuwają pliki z twojego systemu plików bez zrozumienia wszystkich szczegółów - tak złe rzeczy dzieją się dobrym serwerom. :)

Oczywiście, jeśli możesz po prostu zmodyfikować swoją aplikację, aby usunąć pliki tymczasowe, gdy zostanie to zrobione z nimi, to byłoby o wiele lepszym rozwiązaniem, ogólnie.

+1

Pamiętam, że był błąd, w którym "find" lub "rm" podążały za dowiązaniami symbolicznymi ... Nie jestem tego pewien. Ale może być ważne, aby spróbować przed użyciem. Ponieważ jeśli ktoś robi coś w stylu ln -s// tmp/ItWillEraseEverything. To może nie być zabawne, jeśli twoja praca cron podąża za dowiązaniami symbolicznymi. –

+1

Podczas czyszczenia/tmp należy uważać na problemy z bezpieczeństwem. W Debianie i pochodnych tmpreaper powinien być przydatny. –

+1

Dlatego niektóre implementacje UNIX (np. Solaris) zawsze będą czyścić/tmp podczas ponownego uruchamiania. Zwykle istnieją również zadania cron do czyszczenia/tmp raz na jakiś czas. To zależy od twojej dystrybucji LINUX. Powinieneś włożyć do tego zadanie cron, jeśli go nie ma. – Tilo

4

Tak Będzie on powiązany z jednym z dysków/partycji i można się najeść. Zostaje usunięty przy ponownym uruchomieniu komputera.

Po zamknięciu aplikacji należy wyczyścić pliki po nich.

+0

To jest konfigurowalny i bynajmniej prawdą we wszystkich dystrybucjach. –

5

Jedyne, co można napisać, nie martwiąc się, to zapełnienie to /dev/null. Wszystko inne w końcu zabraknie miejsca, jeśli nadal będziesz w nim składować.

Prostym rozwiązaniem byłoby mieć zadanie cron oczyścić wszystkie swoje/tmp pliki, które są starsze niż, powiedzmy, kilka dni.

0

Niektóre dystrybucje linuksowe mają pakiet, który oczyszcza stare pliki w/tmp. Nie jest trudno wdrożyć własne, jak wspomniano powyżej. Należy zwrócić uwagę na długotrwałe procesy, szczególnie "zombie", które zmarły, ale które nie zakończyły sprzątania po sobie. Jeśli proces ma otwarty plik, samo usunięcie go z/tmp nie spowoduje odzyskania jego miejsca - musisz zabić proces lub jakoś przymusić go do zamknięcia pliku. Wiele programów, które zapisują pliki dziennika lub pliki tymczasowe, ma za zadanie wychwycić sygnał (często SIGUSR1) i zamknąć i ponownie otworzyć wszystkie pliki dziennika lub pliki tymczasowe z tego powodu.

0

Wiele dystrybucji Linuksa zawiera coś o nazwie "tmpwatch" lub podobne, które działa przez crona i usuwa obiekty na predefiniowanym gradiencie. Niektóre są wystarczająco inteligentne, aby przejść przez właściciela pliku. Rzeczy, które są własnością użytkowników demona, są usuwane szybciej niż rzeczy posiadane przez zwykłych użytkowników. Sprawdź na listach mailingowych swojej wybranej dystrybucji, aby się dowiedzieć.

Mimo to powinieneś mieć SNMP lub jakiś inny monitor obserwujący, ile miejsca jest dostępne, jeśli wypełni usługi, takie jak Apache, nie będą zadowoleni. Na przykład, e-akcelerator dla PHP będzie wymagał dużo miejsca, niektóre skanery pocztowe nie będą prawidłowo czyszczone, itp.

+0

I thing połączenie cron i tmpwatch jest dobrym rozwiązaniem tego problemu. Dzięki –

1

W jakim języku jest twoja aplikacja internetowa? Wiele języków zaproponować pliki tymczasowe:

Szukaj w języku polskim, jeżeli istnieje taka funkcja.

+1

Może brakuje mi tutaj czegoś, ale czy nie było to pytanie o usuwanie plików tymczasowych, a nie tworzenie? –

3

Nie można po prostu ślepo usunąć wszystkiego, co nie zostało zmodyfikowane przez określony czas. Wiele programów zapisuje tam gniazda, które nigdy się nie modyfikują, ale nadal są integralną częścią działającego programu. Weźmy na przykład mysql z jednego z moich serwerów:

srwxrwxrwx 1 mysql mysql   0 Sep 11 04:01 mysql.sock= 

To jest poprawny, działający "plik" w/tmp. Po prostu wygląda na starą, ponieważ mysql nie został uruchomiony od jakiegoś czasu. Ograniczaj swoje znalezisko za pomocą "-type f" lub "-atime" lub użyj jednego z dostarczonych przez distro narzędzi, o których wspominali inni.

0

Tylko uwaga: nie wszystkie instalacja Linux czyścić katalog/tmp po każdym restarcie