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.

yasith
quelle
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.

TOertel
quelle
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
Das Parsen ls ist im Allgemeinen fehlerhaft .
Kamil Maciorowski