Installation
- Modulordner nach
modules_v4/cronjob/kopieren (ZIP-Installation geht auch). Die Cron-Bibliothek ist im Modul enthalten — nichts zu holen. - Webtrees einmal öffnen (irgendeine Seite als Admin), damit das Modul-
boot()seine Tabellen erstellt. - Trigger installieren (klassisches Cron, systemd-Timer oder Windows Task Scheduler — die Admin-Seite des Moduls generiert den Block für Ihr OS mit den Pfaden dieser Installation bereits ausgefüllt).
- Trigger-Installation (einmalig) — siehe unten.
- Erstellen Sie Ihren ersten Job in der Admin-UI oder konfigurieren und aktivieren Sie registrierte Jobs.
Trigger-Installation (einmalig)

Wichtig — PHP-CLI-Binary: Die Installation-Akkordeon auf der Admin-Seite zeigt, welcher PHP-CLI-Interpreter derzeit aufgelöst wird (Badge: auto-erkannt / manueller Pfad) und erlaubt das Festpinnen eines manuellen Pfads.
Es ist wichtig zu prüfen, ob Ihr Webserver eine PHP-CLI-Binary (SAPI) bereitstellt und ob das Modul korrekt konfiguriert ist, um sie zu verwenden. Andernfalls wird Tick nicht funktionieren.
Der Tick ist so konzipiert, dass er alle 60 Sekunden läuft. Er erfasst Cron-Jobs, Commands und Events, triggert Events und verarbeitet die Task-Queue.
Wählen Sie eine der auf der Admin-Seite gezeigten Optionen:
Option A — klassisches Cron
Eine Zeile in der Crontab des Webserver-Nutzers, läuft jede Minute:
* * * * * cd "/path/to/webtrees" && mkdir -p data/cronjob && "/usr/bin/php" modules_v4/cronjob/cli/tick.php cron:tick >> "/path/to/webtrees/data/cronjob/tick.log" 2>&1
Option B — systemd-Timer
Zwei Unit-Dateien (werden auch auf der Admin-Seite angezeigt):
# /etc/systemd/system/cronjob-tick.service
[Unit]
Description=webtrees cronjob module tick (runs due maintenance jobs)
[Service]
Type=oneshot
User=<webserver-user>
WorkingDirectory="/path/to/webtrees"
ExecStart="/usr/bin/php" ./modules_v4/cronjob/cli/tick.php cron:tick
# /etc/systemd/system/cronjob-tick.timer
[Unit]
Description=Run the webtrees cronjob tick every minute
[Timer]
OnBootSec=1min
OnCalendar=*:*:00
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now cronjob-tick.timer
Option C — Watch-Daemon (kein OS-Timer)
Klicken Sie Start watch auf der Admin-Seite. Ein Resident-Prozess führt den Tick alle 60 Sekunden aus, und ein Page-Load-Watchdog startet ihn neu, falls er stirbt. Verwenden Sie es, wenn der Host kein Cron und keinen systemd-Zugriff hat, oder für Tests — auf Windows-Hosts ist dies die einfachste Option.
stateDiagram-v2
[*] --> Stopped: (initial)
Stopped --> Running: Watch starten (Admin-UI)
Running --> TickLoop: tick alle 60 s
TickLoop --> TickLoop: Job ausführen
TickLoop --> Dead: ⚠ Prozess stirbt
Dead --> Running: 🔄 Watchdog respawn<br/>(nächster Page-Load<br/>Cooldown 5 min)
Running --> Stopped: Watch stoppen
Dead --> Stopped: Watch stoppen<br/>(kein Respawn)
note right of Running
🔒 Hält data/cronjob/watch.lock
🆔 PID sichtbar in Admin-UI
🛡 Überlebt FPM-Worker-Recycle (setsid)
end note
Option D — Windows Task Scheduler
Die Admin-Seite generiert das XML mit bereits ausgefüllten Pfaden. Speichern Sie es als wt-cronjob-tick.xml (UTF-8) und führen Sie schtasks /Create /F /XML wt-cronjob-tick.xml einmal in einer erhöhten Eingabeaufforderung aus.