Samstag, September 5, 2026

Netbox - Semaphore Housekeeping, nachdem LXC vollgelaufen ist

Semaphore konnte keine Tasks mehr ausführen.

11:00:08 AM
fatal: [localhost]: FAILED! => {"msg": "failed to transfer file to /root/.ansible/tmp/ansible-tmp-1788598808.745682-600055-252320871827258/AnsiballZ_uri.py: [Errno 28] No space left on device: b'/opt/semaphore/tmp/project_2/repository_1_template_7_home/.ansible/tmp/ansible-local-599946yh9hvxgy/tmp9rlk1asu' -> b'/root/.ansible/tmp/ansible-tmp-1788598808.745682-600055-252320871827258/AnsiballZ_uri.py'"}

Das LXC war schlicht vollgelaufen. Als Schuldigen habe ich /opt/semaphore/database.sqlite ausgemacht. Die Datenbank ist auf 1,2gb angewachsen. Jeder Durchlauf der Templates wird scheinbar in der Datenbank gespeichert. Notfallmäßig habe ich das Semaphore LXC zunächst um 4GB vergrößert. Um die Datenbank automatisch aufzuräumen, muss man die config.json von Semaphore etwas ergänzen.

{
  "sqlite": {
    "host": "/opt/semaphore/database.sqlite"
  },
  "dialect": "sqlite",
  "max_tasks_per_template": 30,
  "tmp_path": "/opt/semaphore/tmp",

die neue Zeile “max_tasks_per_template”: 30, regelt, das nur die letzten 30 Durchläufe aufbewahrt werden. Man muss den Dienst semaphore nach dem Ändern der Config neu starten

Nachtrag: Ich habe den Wert inzwischen auf 670 gesetzt, das entspricht bei meinen Logs derzeit in etwa 7 Tage. 30 ist viel zu wenig.

systemctl restart semaphore

Die GUI ist danach erst mal nicht mehr erreichbar. Via Proxmox Shell komme ich noch auf das LXC. Neben der database.sqlite ist eine neue Datei erschienen mit dem Namen database.sqlite-journal

Every 2.0s: ls -la                                                                                semaphore: Sat Sep  5 13:35:15 2026
total 1271488
drwxr-xr-x 4 root root       4096 Sep  5 13:15 .
drwxr-xr-x 3 root root       4096 Jul 14 00:46 ..
-rw------- 1 root root        411 Jul 25 12:59 ansible-key
-rw-r--r-- 1 root root         99 Jul 25 12:59 ansible-key.pub
-rw-r--r-- 1 root root        370 Sep  5 13:11 config.json
-rw-r--r-- 1 root root        338 Sep  5 13:06 config.json.bak
-rw-r--r-- 1 root root 1269415936 Sep  5 13:35 database.sqlite
-rw-r--r-- 1 root root   32554168 Sep  5 13:35 database.sqlite-journal
drwxr-xr-x 4 root root       4096 Aug 30 11:44 playbooks
drwxr-xr-x 3 root root       4096 Jul 24 21:21 tmp

Es müssen zahlreiche Einträge gelöscht werden und für ein eventuelles Recovery wird eine solche Sicherungsdatei angelegt. Sobald der Löschvorgang abgschlossen ist, verschwindet auch die database.sqlite-journal wieder. In meinem Fall hätte ich ohne Vergößerung des LXCs auch nichts löschen können, da die Recoverydatei ja auch Platz bekegt. Man muss also den o.g. Mechanismus direkt nach der Installation des Semaphore LXCs aktivieren, um das Semaphore LXC dauerhaft schlank zu halten. Der Löschprozess hat bei mir seeehr lange gedauert. Danach ist die database.sqlite immer noch 1,2gb groß, allerdings sind das nur leere Seiten. Endgültig los wird man die leeren Seiten erst durch einen Eingriff in sqlite. Dazu muss der o.g. Löschprozess zuerst abgeschlossen sein und der semaphore Dienst angehalten werden

systemctl stop semaphore
sqlite3 /opt/semaphore/database.sqlite "VACUUM;"
systemctl start semaphore

sqlite3 muss man evtl vorher noch über apt installieren.

Bildschirmfoto_20260906_085947.png

Wie man auf dem Screenshot sehen kann ist die Datei database.sqlite nun wesentlich kleiner als vorher.

RSS | ATOM


Kommentar hinzufügen

Die Felder Name und Kommentar sind Pflichtfelder.


BBCode Hilfe