/tmp
Dizin nasıl temizlenir? Otomatik mi Eğer öyleyse, ne sıklıkta temizlenir?
/tmp
Dizin nasıl temizlenir? Otomatik mi Eğer öyleyse, ne sıklıkta temizlenir?
Yanıtlar:
Not! Bu cevap, en azından 14.04 tarihinden beri eski. Mevcut durum için diğer cevaplara bakın ve doğru olduklarını ispatladıktan sonra onları öfkeyle yükseltin. Ayrıca yorum gönder, böylece güncel doğru cevabı buraya bağlayabilirim.
14.04 için bkz https://askubuntu.com/a/759048/1366
16.10 için bkz. Https://askubuntu.com/a/857154/453746
2011'den gelen eski cevap:
Temizliği /tmp
, başlangıç betiği tarafından yapılır /etc/init/mounted-tmp.conf
. Betik, her seferinde /tmp
monte edildiğinde , başlangıç tarafından çalıştırılır . Pratik olarak bu her açılışta anlamına gelir.
Komut aşağı yukarı şunları yapar: içindeki bir dosya günden /tmp
daha eskiyse $TMPTIME
silinir.
Varsayılan değer $TMPTIME
0'dır, yani içindeki her dosya ve dizin /tmp
silinir. $TMPTIME
tanımlanmış bir ortam değişkeni /etc/default/rcS
.
Her önyüklemede dizin varsayılan olarak temizlenir, çünkü TMPTIME
varsayılan olarak 0'dır.
Buradan aşağıdaki dosyadaki zamanı değiştirebilirsiniz:
/etc/default/rcS
TMPTIME
tmp dir değerinin ne kadar sıklıkla temizleneceğini söylüyor
tmpreaper
bir şans vermelisin .
tmpwatch
uygun bir araç olmalıdır.
İken /tmp
klasör dosyaları uzun vadeli saklamak için bir yer değil, ara sıra biraz daha uzun devam ettirmek istiyoruz yeniden başlattığınız bir dahaki sefere Ubuntu sistemlerinde varsayılan değerdir. /tmp
Test sırasında bir şeyler indirdiğim , değişiklikler yaptıktan sonra yeniden başlattıktan sonra orijinal verileri tekrar kaybettiğimi biliyorum . /tmp
Dosyalarınızı biraz daha uzun tutmak istiyorsanız bu değişiklik yapılabilir .
/tmp
Temizleme Frekansını Değiştirme
Sisteminizde /tmp
yeniden başlatma sırasında silmenizi söyleyen varsayılan ayar /etc/default/rcS
dosyada tutulur . Bakacağımız değer şudur TMPTIME
.
Geçerli değer TMPTIME=0
, dosyanın yaşına rağmen dosyaları yeniden başlatırken sil diyor. Bu değeri farklı (pozitif) bir sayıya değiştirmek, bir dosyanın hayatta kalabileceği gün sayısını değiştirir /tmp
.
TMPTIME=7
Bu ayar dosyaların /tmp
bir hafta öncesine kadar kalmasına ve bir sonraki yeniden başlatmada silinmesine olanak tanır . Negatif bir sayı ( TMPTIME=-1
), sisteme asla hiçbir şeyi silmemesini söyler /tmp
. Bu muhtemelen istediğiniz bir şey değil, kullanılabilir.
/etc/init/mounted-temp.conf
, ancak start on mounted MOUNTPOINT=/tmp
uygulanabilir olmadığını düşündüren bir çizgiye sahip.
/var/tmp
yerine koyun /tmp
.
Bunu Ubuntu 16.10'da kontrol ediyorum. / Etc / default / rcS düzenlemesinin artık hiçbir etkisi olmadığını ve bu dosyaya ne koyduğunuz önemli değil, tmp içindeki dosyaların yeniden başlatılarak silindiğini onaylayabilirim. Diğerlerinin dediği gibi, tmpreaper artık kullanılmamaktadır.
Bence doğru cevap, Ubuntu 16.10'un yeni bir kuruma sahip olduğudur. "Tmpfiles.d" man sayfasında belgelenen /etc/tmpfiles.d adlı bir klasör var. Bu klasörde, / tmp'nin silinip silinmeyeceğini kontrol etmek için bir yapılandırma dosyası yerleştirilmelidir. Bu, 20 gün eski olmadıkça, yeniden başlatmaların / tmp içindeki dosyaları silmelerini durdurmak için yaptığım şey:
#/etc/tmpfiles.d/tmp.conf
d /tmp 1777 root root 20d
Dosyaları asla silmek istemiyorsanız, "20d" yi "-" ile değiştirin. Bu benim en iyi çabam, bu adam sayfası neredeyse ayrıntılarla aşılmaz.
Yeni kurulumun avantajı, sistem yeniden başlatılmamış olsa bile (her zaman sunucuda olduğu gibi) bir dosya temizleyicinin çalışabilmesidir. Bu büyük bir artı sanırım.
man tmpfiles.d
d /tmp/ - - - 20d
systemctl start systemd-tmpfiles-clean
Ubuntu 14.04'te bu tmpreaper
günlük olarak cron (from /etc/cron.daily
) adı verilen bir işlem yapılır . Program /etc/default/rcS
ve ile yapılandırılabilir /etc/tmpreaper.conf
.
Her yeniden başlatışınızda temizlenir.
tmpreaper
.
Bir systemd
Ubuntu'da (15.10 ve daha yenisi), systemd-tmpfiles-clean
servis ve zamanlayıcı kullanılarak sistemd tarafından yapılır :
$ 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
Ve
$ 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
Böylece systemd-tmpfiles-clean
kapanma ve günde bir kez çalışır. Temizlediği dosyalar başka bir cevapta/etc/tmpfiles.d
belirtilenler kullanılarak genişletilebilir .
Zamanlayıcı davranışının kendisini kullanarak systemctl edit systemd-tmpfiles-clean.timer
ve çeşitli sistem Timer
konfigürasyon seçeneklerini kullanarak değiştirebilirsiniz (bkz. man 5 systemd.timer
).
/tmp
hala temizlenmiş değil. ve temizlenmesini istiyorum. manuel başlatma bile sudo systemctl start systemd-tmpfiles-clean
hile yapmaz. Neden bir fikrin var mı?
Ubuntu çalıştıran sunucularımızdan birinde, / tmp içindeki dosyaları kaldırmak için bir komut dosyası kullanıyoruz ve her gece çalışıyor.
Betik:
#!/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 {} \;
Sadece yukarıdaki içeriği bir dosyaya kaydediniz chmod 775 ve dosyayı çalıştırmak için bir cron girişi oluşturun. Bu bir web sunucusu olduğundan, bariz nedenlerden dolayı yeniden başlatmak istemiyoruz.
ln -s /usr /tmp/kaboom
ln -s /* /tmp/
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
/ Etc / fstab içine yazdım .