Löschen der ältesten Dateien, um unter Linux nach Bedarf Speicherplatz freizugeben


2

Ich habe einen Cron-Job, in den Protokolle geschrieben werden /tmp. Ich möchte automatisch die ältesten Dateien löschen, wenn der freie Speicherplatz auf der Festplatte weniger als 1 GB beträgt.

Ich versuche es zu tun df -ah /tmp, dann nimm die 2. Zeile, benutze cutum die availSpalte zu bekommen . forLöschen Sie dann in einer Schleife die Dateien, die älter als n Tage sind, so lange, -mtimebis genügend freier Speicherplatz vorhanden ist.

Ich möchte dies wahrscheinlich als Cron-Job einrichten, der auch täglich ausgeführt wird.


Ich versuche zu tun df -ah /tmp, dann nehmen Sie die 2. Zeile, verwenden Sie cut, um die Spalte avail zu erhalten. Löschen Sie anschließend in einer for-Schleife die Dateien, die älter als n Tage sind, mit -mtime. Bis genügend freier Speicherplatz vorhanden ist.
— Yasith

1
Sie sollten das in Ihre Frage stellen, Sie können es bearbeiten . Sie haben also ein Konzept und versucht, ein Skript zu erstellen, das es verwendet, oder? Fügen Sie auch dieses Skript ein.
— Gronostaj

Sind Sie sich sicher, dass dies ausreichen wird, abgesehen von Bash-Skripten? Zum Beispiel habe ich derzeit 96K in meinem /tmp, was viel kleiner als 1G ist, verbleibenden freien Speicherplatz. Es ist wahrscheinlich eine bessere Idee, zu rennen apt-get autoremove && apt-get clean && apt-get autoclean, um freien Speicherplatz wiederzugewinnen.
— MariusMatutiae

Wenn Sie Debian oder ein Derivat davon verwenden, können Sie in Betracht ziehen, Folgendes zu verwenden tmpreaper: Es tut genau das, wonach Sie suchen.
— Jaap Eldering

Antworten:


1

Führen Sie anstelle von find -mtime ein ls -t aus, zum Beispiel:

DIR=/tmp
FREESPACE=1000000
find $DIR -type f | xargs ls -1rt | while read f ; do
  if [ `df --output=avail $DIR | tail -1` -ge $FREESPACE ] ; then
    break
  fi
  # rm -f $f
done

Kommentar entfernen rm -f $f, damit es tatsächlich funktioniert ...

Normalerweise würde ich die Dinge jedoch ein wenig anders machen. Ich würde meine Cron-Protokolle in / var / log ablegen und so etwas wie logrotate die Verwaltung des Festplattenspeichers übernehmen lassen. Alternativ dazu würde ich die Protokolle in einem separaten Unterverzeichnis wie / tmp / mycronjob / * ablegen und dann eine feste Anzahl von Tagen an Protokolldateien aufbewahren. Es ist nicht so flexibel wie das Überwachen des Speicherplatzes, aber es ist auch einfacher find /tmp/mycronjob -mtime +30 -exec rm {} \;und vorhersehbarer.


1
Ich denke das rm -f sollte nach der Bedingung sein. Andernfalls wird immer mindestens 1 Verzeichnis gelöscht, auch wenn genügend Speicherplatz verfügbar ist.
— Morgan Christiansson

@ MorganChristiansson wahr.
— TOertel

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.