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.
Wie man auf dem Screenshot sehen kann ist die Datei database.sqlite nun wesentlich kleiner als vorher.
