Nextcloud KI-Assistent
Da ich den Docker-Container nicht verändert möchte, soll das Hostsystem entsprechend angepasst werden.
Die hier vorgestellte Beschleunigung ist erheblich, da im Extremfall nicht mehr 5 Minuten auf die Bearbeitung gewartet werden muss. Andere Frontends wie Enchanted, MstyStudio oder Obsidian Copilot sind allerdings mit demselben lokalen KI Server gefĂĽhlt schneller.
Nextcloud Docs / AI: Improve AI task pickup speed
[Improve AI task pickup speed]
Hier habe ich den entscheidenden Hinweis gefunden.
- Das Hintergrund‑Job‑System von Nextcloud führt KI‑Aufgaben standardmäßig alle 5 Minuten aus.
- Durch Einrichten von Hintergrund‑Job‑Workern im Nextcloud‑Server/Container können KI‑Aufgaben sofort nach ihrer Planung verarbeitet werden.
- Änderungen am PHP‑Code oder an Nextcloud‑Einstellungen werden von laufenden Workern nicht sofort übernommen; ein regelmäßiger Neustart des Workers ist nötig.
- Der
occ
‑Befehl sollte in einerscreen
‑ odertmux
‑Sitzung ausgeführt werden, vorzugsweise vier‑mal oder öfter, um mehrere Anfragen parallel zu bearbeiten. - Jeder
occ
‑Befehl sollte in einer eigenenscreen
‑Session bzw.tmux
‑Fenster/Pane laufen, damit Logs sichtbar bleiben und der Worker leicht neu gestartet werden kann.
Der Befehl, um den worker zu starten:
php occ background-job:worker -v -t 60
"OC\TaskProcessing\SynchronousBackgroundJob"
Kontrolle in der Konsole des nextcloud Docker-Containers:
root@b84b2fa1cb35:/# /usr/bin/php /app/www/public/occ
background-job:worker -t 60
"OC\TaskProcessing\SynchronousBackgroundJob"
Background job worker will stop after 60 seconds
UNRAID Server mit Nextcloud
Auf der Server laufen folgende Docker-Container fĂĽr die Nextcloud:
lscr.io/linuxserver/nextcloud
lscr.io/linuxserver/mariadb:11.4.5
onlyoffice/documentserver
jc21/nginx-proxy-manager
Da ich keine fixe IP-Adresse besitze, ist der Server via Cloudflare-Tunnel und Nginx-Proxy-Manager nach aussen exponiert.
Mit dem Community-Plugin 'User-Scripts' wird ein bash-Skript automatisch gestartet beim UNRAID-Systemstart. Dann läufte dieses dauerhaft im Hintergrund und stellt der Nextcloud-KI dauerhaft einen worker zur Verfügung. Die Anfragen werden nun sofort bearbeitet und nicht zuerst in einer Warteschleife 'parkiert'.
Das bash-Skript habe ich mit gpt-oss:120b auf dem lokalen Ollama-Server erstellt. Eine Lösung mit parallelen Sessions hat nicht funktioniert, versuche das später noch einmal.
gpt-oss:120b lieferte hier das deutlich bessere Resultat als die Online-KI Gemini 2.5 Flash.
Skript:
#!/usr/bin/env bash
# ------------------------------------------------------------
# Nextcloud‑Worker‑Restarter
# Aufruf über das UNRAID User‑Script‑Plugin (oder CLI)
# ------------------------------------------------------------
set -euo pipefail
# ---- Konfiguration -------------------------------------------------
# Name des Docker‑Containers
NC_CONTAINER="nextcloud"
WORKER_CMD=(
php /app/www/public/occ
background-job:worker
-t 60 "OC\TaskProcessing\SynchronousBackgroundJob"
)
# Pfad zur Log‑Datei
LOGFILE="/mnt/user/appdata/scripts/nextcloud-worker.log"
# Sekunden, bevor neu gestartet wird
RESTART_DELAY=5
# --------------------------------------------------------------------
# ---- Hilfsfunktionen ------------------------------------------------
log() {
local ts
ts=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$ts] $*" | tee -a "$LOGFILE"
}
die() {
log "ERROR: $*"
exit 1
}
# --------------------------------------------------------------------
# ---- Vorab‑Checks ---------------------------------------------------
if ! command -v docker >/dev/null 2>&1; then
die "Docker ist nicht installiert oder nicht im PATH."
fi
if ! docker ps -q -f "name=^${NC_CONTAINER}$" | grep -q .; then
die "Container '${NC_CONTAINER}' läuft nicht oder existiert nicht."
fi
# --------------------------------------------------------------------
# ---- Abbruch‑Handling ------------------------------------------------
trap 'log "Abbruch durch Nutzer – Skript wird beendet."; exit 0' SIGINT SIGTERM
# --------------------------------------------------------------------
log "= Start des Nextcloud‑Worker‑Restarters ="
while true; do
log "Starting Nextcloud Worker (Timeout: 60 s)…"
# Docker‑exec mit Array‑Syntax, damit Sonderzeichen sicher übergeben werden
if docker exec "$NC_CONTAINER" "${WORKER_CMD[@]}"; then
log "Worker beendet (Exit‑Code 0)."
else
rc=$?
log "Worker beendet mit Fehler‑Exit‑Code $rc."
fi
log "Restarting in ${RESTART_DELAY}s…"
sleep "$RESTART_DELAY"
done
Erklärung wird gleich mitgeliefert:
Befehl | Nutzen |
---|---|
#!/usr/bin/env bash |
Portabler Shebang. |
set -euo pipefail |
Skript bricht bei Fehlern sofort ab – verhindert ungewolltes Weiterlaufen. |
log()  + tee |
Sowohl in der Konsole (wenn du das Skript aus Obsidian startest) als auch in einer Log‑Datei sichtbar. |
WORKER_CMD als Array |
Keine Probleme mehr mit Anführungszeichen oder Escape‑Sequenzen. |
Vorab‑Check, ob Docker läuft & Container existiert | Frühzeitige Fehlermeldung, statt endlos zu warten. |
trap fĂĽr SIGINT/SIGTERM |
Sauberer Abbruch, wenn du das Skript aus Obsidian stoppst. |
RESTART_DELAY als Variable |
Einfach anpassbar. |
die() ‑Funktion |
Einheitliche Fehlermeldungen. |
Kontrolle im log:
root@ASRockMini:~# cat /mnt/user/appdata/scripts/nextcloud-worker.log
[2025-10-01 22:31:39] = Start des Nextcloud‑Worker‑Restarters =
[2025-10-01 22:31:40] Starting Nextcloud Worker (Timeout: 60 s)…
[2025-10-01 22:31:57] Abbruch durch Nutzer – Skript wird beendet.
[2025-10-01 22:32:13] = Start des Nextcloud‑Worker‑Restarters =
[2025-10-01 22:32:13] Starting Nextcloud Worker (Timeout: 60 s)…
[2025-10-01 22:33:15] Worker beendet (Exit‑Code 0).
[2025-10-01 22:33:15] Restarting in 5s…
[2025-10-01 22:33:20] Starting Nextcloud Worker (Timeout: 60 s)…
[2025-10-01 22:34:22] Worker beendet (Exit‑Code 0).
[2025-10-01 22:34:22] Restarting in 5s…
[2025-10-01 22:34:27] Starting Nextcloud Worker (Timeout: 60 s)…
Hardware
Die Hardware läuft im eigenen Haus.
UNRAID Server
Mac Studio KI Server
Stromverbrauch
Beide Geräte sind an eine APC UPS angeschlossen. Der Stromverbrauch der angeschlossenen Geräte wird im Dashboard von UNRAID angezeigt.
Im Ruhezustand werden nur 23 W benötigt. Der Mini PC benötigt hier 13 W, der Mac Studio 10 W. Bei einer KI-Anfrage steigt der Stromverbrauch dann für einige Sekunden auf bis zu 180 W.



Nextcloud Assistant
Nextcloud kann auf OpenAI kompatible lokale Server zugreifen.

Diese KI-Anfrage benötigt für einige Sekunden etwa 150 W.
