Regelmäßige Bereinigungsaufgaben (cleanup tasks)

Mastodon erzeugt einige temporäre Dateien, die nach einer gewissen Zeit bereinigt zu werden können. Im Allgemeinen kann dies über Cron-Jobs (oder einen anderen Mechanismus) erledigt werden, um diese regelmäßigen Bereinigungsaufgaben auszuführen.

Aktuell, also ab Mastodon v4.x, werden tootctl media remove und tootctl statuses remove mit den anderen Hintergrundaufgaben ausgeführt, es gibt aber noch weitere Möglichkeiten den Speicher zu bereinigen:

Damit werden verwaiste Bilder aus dem Speicher entfernt.
Zu beachten ist dabei:

Bitte beachten Sie, dass einige Speicheranbieter Gebühren für die notwendigen API-Anfragen zur Auflistung von Objekten erheben. Außerdem muss bei diesem Vorgang jede einzelne Datei durchlaufen werden, was langsam ist.

tootctl media remove-orphans

Mit diesem Befehl werden Vorschaubilder für URL’s, welche älter als 14 Tage sind, aus dem Speicher entfernt.

tootctl preview_cards remove --days 14

Und um den Cache zu bereinigen, kann dieser Befehl ausgeführt werden

tootctl cache clear

Dieser Befehl löscht alle entfernten Konten, mit denen nie lokal interagiert wurde.
Er entfernt viele Avatar-/Kopfzeilenbilder.

tootctl accounts prune

Entfernt lokal zwischengespeicherte Kopien von Medienanhängen (und optional Profil Kopfzeilen und Avatare) von anderen Servern.

tootctl media remove --days 7
tootctl media remove --prune-profiles --days 7

Es kann anstelle von --prune-profiles auch --remove-headers genutzt werden, dann werden nur die header gelöscht.
Mit dem Schalter --include-follows werden alle nicht-lokalen Profile gelöscht, unabhängig vom Folgestatus. Standardmäßig werden nur Konten, denen niemand folgt oder die lokal verfolgt werden, werden entfernt.

Als Script

Ich habe die Scripts einmal auf Codeberg ausgelagert:

Sehr nützlicher Beitrag! Seit gestern hatte ich ein >80% Auslastung der 4GB SSD am
troet.fediverse.at. Ein Blick in das du-Chart am Grafana zeigte deutlich, wo der Hase im Pfeffer lag:

So ist es kein Wunder, dass nach dem Ausführen der Kommandos von oben, wieder viel Platz ist:

Danke @Tealk !

2 „Gefällt mir“

Im Rückblick sieht mensch auch schön, wie nachhaltig das einmalige Ausführen der “Bereinigungsaufgaben” war.

1 „Gefällt mir“

Hatte bei mir im Cron auch nen typo drin, daher hab ich jetzt in ein Script gepackt:
image

@Tealk

Danke für die Anleitung, hat schon mal eine Menge Platz auf der Platte eingespart.

Alternativ zum Cronjob habe ich den Systemd-Timer genommen. Der lässt sich (aus meiner Sicht) komfortabler mit start/stop/enable/disable bedienen und zusätlich lassen sich die Jobs im Journal und mit “systemd list-timers” anschauen.

Bin jetzt nicht die Systemd-Leuchte, Anregungen nehme ich gerne entgegen. :wink:

/etc/systemd/system/mastodon-cleanup.service

[Unit]
Description=Mastodon Cleanup service

[Service]
Type=oneshot
User=mastodon
WorkingDirectory=/home/mastodon
ExecStart=/home/mastodon/clean.sh

[Install]
WantedBy=multi-user.target

Und noch den Timer dazu
/etc/systemd/system/mastodon-cleanup.timer

[Unit]
Description=Mastodon Cleanup timer

[Timer]
OnCalendar=daily

[Install]
WantedBy=timers.target

Status des Timers

root@mastodon:~# systemctl status mastodon-cleanup.timer
● mastodon-cleanup.timer - Mastodon Cleanup timer
     Loaded: loaded (/etc/systemd/system/mastodon-cleanup.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2023-05-15 05:24:11 UTC; 8h ago
    Trigger: Tue 2023-05-16 00:00:00 UTC; 9h left
   Triggers: ● mastodon-cleanup.service

May 15 05:24:11 mastodon systemd[1]: Started Mastodon Cleanup timer.

Journal
$ journalctl -u mastodon-cleanup.service

May 15 04:22:20 mastodon systemd[1]: Starting Mastodon Cleanup service...
May 15 04:22:28 mastodon clean.sh[14752]: Progress: |====================================================================|
May 15 04:22:28 mastodon clean.sh[14752]: OK, pruned 12 accounts
May 15 04:22:36 mastodon clean.sh[14844]: Creating temporary database indices...
May 15 04:22:36 mastodon clean.sh[14844]: Extract the deletion target from statuses... This might take a while...
May 15 04:22:36 mastodon clean.sh[14844]: Removing temporary database indices to restore write performance...
May 15 04:22:36 mastodon clean.sh[14844]: Beginning statuses removal... This might take a while...
May 15 04:22:36 mastodon clean.sh[14844]: Progress: |====================================================================|
May 15 04:22:36 mastodon clean.sh[14844]: Done after 0.09119415283203125s, removed 14 out of 14 statuses.
May 15 04:22:36 mastodon clean.sh[14844]: Removing temporary database indices to restore write performance...
May 15 04:22:36 mastodon clean.sh[14844]: Run ANALYZE to statuses...
May 15 04:22:36 mastodon clean.sh[14844]: Beginning removal of now-orphaned media attachments to free up disk space...
May 15 04:22:36 mastodon clean.sh[14844]: Progress: |====================================================================|
May 15 04:22:36 mastodon clean.sh[14844]: Done after 0.016240358352661133s, removed 0 out of 0 media_attachments.
May 15 04:22:36 mastodon clean.sh[14844]: Creating temporary database indices...
May 15 04:22:36 mastodon clean.sh[14844]: Extract the deletion target from conversations... This might take a while...
May 15 04:22:36 mastodon clean.sh[14844]: Removing temporary database indices to restore write performance...
May 15 04:22:36 mastodon clean.sh[14844]: Beginning orphans removal... This might take a while...
May 15 04:22:36 mastodon clean.sh[14844]: Progress: |====================================================================|
May 15 04:22:36 mastodon clean.sh[14844]: Done after 0.03684711456298828s, removed 0 out of 0 conversations.
May 15 04:22:36 mastodon clean.sh[14844]: Removing temporary database indices to restore write performance...
May 15 04:22:36 mastodon clean.sh[14844]: Run ANALYZE to conversations...
May 15 04:22:44 mastodon clean.sh[14879]: Progress: |====================================================================|
May 15 04:22:44 mastodon clean.sh[14879]: Removed 1 media attachments (approx. 160 KB)
May 15 04:22:52 mastodon clean.sh[14908]: Progress: |====================================================================|
May 15 04:22:52 mastodon clean.sh[14908]: Visited 3077 accounts and removed profile media totaling 0 Bytes
May 15 04:23:00 mastodon clean.sh[15317]: Progress: |====================================================================|
May 15 04:23:00 mastodon clean.sh[15317]: Removed 1 preview cards (approx. 78 KB)
May 15 04:23:20 mastodon clean.sh[15347]: Progress: |====================================================================|
May 15 04:23:20 mastodon clean.sh[15347]: Removed 0 orphans (approx. 0 Bytes)
May 15 04:23:20 mastodon systemd[1]: mastodon-cleanup.service: Succeeded.
May 15 04:23:20 mastodon systemd[1]: Finished Mastodon Cleanup service.
May 15 04:23:20 mastodon systemd[1]: mastodon-cleanup.service: Consumed 58.325s CPU time.

2 „Gefällt mir“

Ich habe jetzt mal alles zusammengefasst, was mir so zugetragen wurde und dafür ein Codeberg Repo angelegt. Mitarbeit ist sogar erwünscht! :wink:

1 „Gefällt mir“

Habt ihr Erfahrungswerte, ob insbesondere Preview-Cards und Attachments nachdem sie einmal per tootctl preview_cards remove bzw. tootctl media remove gelöscht wurden, wieder nachgeladen werden, falls sie später nochmal gebraucht werden?

Irgendwer hat schon mal gesagt ja, selbst ausprobiert habe ich es bisher nicht.

1 „Gefällt mir“

Das hält mich zurück zuviel zu purgen :grimacing: Hast du die 14 Tage bei preview_cards remove im Livebetrieb und keine Probleme bemerkt?

1 „Gefällt mir“

Ja ich benutze die im Repo angegebenen Einstellungen, hab nie was Negatives bemerkt und ich nutze alle Funktionen, die eingebaut sind.

2 „Gefällt mir“

Danke @Tealk ! Heute erstmals das ganze Skript laufen gelassen (davor immer nur einzelne Kommandos direkt). Laufzeit 1,5h! Jetzt als Cron-Job mit täglich eingerichtet. Deine Doku ist sehr gut. Das Typeskript beantwortet alle Fragen die bei mir aufgetaucht sind.

Ja die ganzen Aufräumarbeiten dauern echt ne weile:

Script finished at 2023-11-10 00:16:59 (Duration: 2 hours 16 minutes 37 seconds)

Freut mich das es hilfreich ist. :slightly_smiling_face: