Eine Seite, die sich selbst auf dem Laufenden hält

Verfasst von

in

Kurz gesagt: Die Seite „Technik des Backends“ aktualisiert sich täglich selbst, ein Zeitgeber auf dem Server erzeugt sie neu.

Wer eine Werkstatt besucht, möchte wissen, welche Maschinen dort stehen. Bei KISP ist die Werkstatt ein kleiner Server bei mir zu Hause, und die Maschinen heißen WordPress, PHP und Datenbank. Ihre Namen und Versionsnummern gehören zu den Dingen, die sich ändern, ohne dass jemand es merkt. Ein Update hier, ein neues Plugin dort.

Automatisch erzeugte Seite

Eine handgeschriebene Liste wäre schnell überholt. Deshalb habe ich die Seite Technik des Backends so gebaut, dass sie sich selbst schreibt. Ein kleines Skript fragt WordPress, was gerade läuft, und trägt die Antworten in eine Tabelle ein. Ein Wecker auf dem Server startet es jede Nacht um kurz nach vier. Hat sich nichts geändert, bleibt die Seite unberührt.

Was nicht auf der Seite steht

Wichtig war mir, was nicht auf der Seite steht: keine Ordner, keine Zugangsdaten, keine Schlüssel. Das Skript gibt nur aus, was ich ihm ausdrücklich erlaube, eine Positivliste. Alles andere bleibt unsichtbar, auch wenn WordPress es wüsste.

Rolle der KI

Und die KI? Sie hat das Skript mit mir geschrieben. Den täglichen Lauf übernimmt sie nicht. Fakten abzulesen und in eine Tabelle zu setzen braucht kein Nachdenken, und Skripte verbrauchen keine Tokens.

Ergebnis: Die Seite Technik des Backends ist veröffentlicht, ein Hinweis auf der Seite nennt die automatische Aktualisierung, und der Wecker läuft.

Zeig mir, wie es geht: Skript und Timer
  • Skript skripte/technik-seite.sh, auf dem Cube unter /usr/terruhn.it/sbin/kisp-technik-seite.sh (root, 750). Es legt die Seite beim ersten Lauf an (--post_status=publish, Slug technik, Autor claude) und aktualisiert sie danach.
  • Datenquelle: wp eval mit eigenen Abfragen (get_bloginfo, wp_get_theme, get_plugins, get_mu_plugins, $wpdb->db_version()). WP_Debug_Data::debug_data() wird nicht verwendet, weil es Pfade und Datenbank-Host enthält.
  • Änderungserkennung: SHA-256 des erzeugten Markups als Post-Meta _kisp_technik_hash. Das Datum im Seitenfuß geht erst nach dem Hash ein, die Seite ändert sich also nur bei geänderten Angaben.
  • PHP-Werte aus dem Web-Container, an wp eval per Umgebungsvariable übergeben:
KISP_WEB="$(docker compose -p kisp exec -T wordpress php -r 'echo json_encode([...]);')"
docker compose -p kisp run --rm -T -e KISP_WEB="$KISP_WEB" wpcli wp --user=claude eval "$PHP"

Der WP-CLI-Container meldete memory_limit -1, max_execution_time 0 und eine andere PHP-Patchversion (8.3.35 statt 8.3.30).

  • Systemd-Einheiten infra/kisp-technik.service und infra/kisp-technik.timer, installiert unter /etc/systemd/system/:
systemctl daemon-reload
systemctl enable --now kisp-technik.timer
systemctl list-timers kisp-technik.timer

Zeitplan: OnCalendar=--* 04:15:00, Persistent=true, RandomizedDelaySec=5min.

  • Trockenlauf ohne Schreiben: kisp-technik-seite.sh --dry-run.