Um Nextcloud-Hintergrundprozesse mit systemd automatisch auszuführen, konfigurieren Sie einen einmaligen Dienst, der cron.phpals Webserver-Benutzer läuft, und aktivieren Sie einen Timer, der diesen Dienst alle fünf Minuten startet. Die wichtigsten Prüfungen sind: Der Timer ist aktiviert und hat einen nächsten Ausführungszeitpunkt, der Dienst verweist auf die korrekten Pfade zu Nextcloud und PHP, und das Dienstprotokoll zeigt einen erfolgreichen Abschluss an. Ein einmaliger Dienst kann zwischen den Ausführungen als „inaktiv (beendet)“ angezeigt werden; dies ist nach Beendigung normal.
Diese Konfiguration beschreibt eine herkömmliche Nextcloud-Installation unter Ubuntu mit systemd, wobei die Nextcloud-Dateien auf dem Hostsystem verfügbar sind. Läuft Nextcloud in einem Docker-Container, Snap-Container oder einer Appliance wie Nextcloud All-in-One, verwenden Sie die dokumentierte Scheduler-Methode der jeweiligen Distribution, anstatt einen Host-Unit-Pfad auf einen reinen Containerpfad zu verweisen. Die folgenden Beispiele verwenden `/usr/local/nextcloud` /var/www/nextcloudund `/usr www-data/local/nextcloud`; ersetzen Sie diese durch den tatsächlichen Installationspfad und den HTTP-Benutzer auf Ihrem Server.
Was der Timer bewirken soll
Nextcloud cron.phpführt im Hintergrund geplante Aufgaben wie Wartungs- und App-Taktiken aus. Der systemd-Timer dient als Zeitgeber; der Dienst ist der Befehl, der nach Ablauf der Zeit ausgeführt wird. Beides ist erforderlich. Werden die Dateien erstellt, ohne den Timer zu aktivieren, bleibt der Zeitplan inaktiv. Die Aktivierung eines Timers, der auf den falschen PHP- oder Nextcloud-Pfad verweist, kann hingegen zu wiederholten Fehlschlägen führen.
Nextcloud empfiehlt für Hintergrundprozesse im Produktivbetrieb die Verwendung von Cron-Jobs. Das aktuelle Administrationshandbuch beschreibt alternativ auch die Verwendung von Systemd-Timern. Der Beispielzeitplan startet fünf Minuten nach dem Systemstart und plant anschließend einen weiteren Lauf fünf Minuten nach jeder Dienstaktivierung. Dadurch wird vermieden, dass ein Benutzer die Weboberfläche aufrufen muss.
1. Installationspfad, Benutzer und PHP-CLI bestätigen.
Bevor Sie Einheiten bearbeiten, suchen Sie das eigentliche Nextcloud-Verzeichnis und prüfen Sie, welchen PHP-Befehl die Webserver-Installation erwartet. Bei einer typischen Ubuntu-Archivinstallation lautet der Pfad beispielsweise `/usr/local/bin` /var/www/nextcloud, der Webbenutzer ist oft `/usr/bin` www-dataund die PHP-Befehlszeilenschnittstelle ist `php-cli` /usr/bin/php. Überprüfen Sie dies, anstatt es anzunehmen.
ls -l /var/www/nextcloud/cron.php
command -v php
php -v
Befindet sich Ihr Nextcloud-Verzeichnis an einem anderen Ort, ersetzen Sie dieses Verzeichnis in beiden unten stehenden Unit-Befehlen. Nutzt der Webserver eine andere PHP-Version, verwenden Sie die entsprechende CLI-Datei dieser Version ExecStart. ExecConditionEin systemd-Dienst erbt weder den PATH noch die Umgebung der interaktiven Shell; daher sind explizite Pfade zuverlässiger.
Testen Sie die Statusprüfung unter demselben Benutzer, den systemd verwenden wird:
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ status -e
Der Nextcloud- occBefehl sollte als HTTP-Benutzer ausgeführt werden, um die korrekten Dateibesitzverhältnisse und Berechtigungen zu gewährleisten. Falls dieser Test einen PHP-Fehler, den Wartungsmodus oder eine fehlende Datei meldet, beheben Sie dies bitte zuerst; der Timer kann einen fehlgeschlagenen Nextcloud-Befehl nicht kompensieren.
2. Erstellen Sie den einmaligen Dienst
Erstellen /etc/systemd/system/nextcloudcron.service:
sudo nano /etc/systemd/system/nextcloudcron.service
Geben Sie diese Einheit ein und passen Sie Pfad und Benutzername an, falls Ihre Installation abweicht:
[Unit]
Description=Nextcloud cron.php job
[Service]
User=www-data
ExecCondition=/usr/bin/php -f /var/www/nextcloud/occ status -e
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process
ExecConditionPrüft vor dem Start des Hintergrundprozesses, ob Nextcloud ordnungsgemäß funktioniert. Schlägt dies fehl, überspringt systemd die Ausführung; die Ursache lässt sich im Journal nachlesen. KillMode=processErmöglicht es externen Programmen, die von einem Hintergrundprozess gestartet wurden, nach Beendigung des Haupt-Cron-Prozesses fortzufahren. Das aktuelle Nextcloud-Beispiel benötigt keinen entsprechenden [Install]Abschnitt in dieser Dienstdatei.
Die Verwendung /usr/bin/phpist nur dann angebracht, wenn es sich um den korrekten CLI-Interpreter auf Ihrem Server handelt. Beispielsweise kann ein benutzerdefiniertes PHP-Repository eine versionierte Binärdatei installieren. Verwenden Sie dieselbe kompatible PHP-Version, die Nextcloud benötigt und die in der Webserver-Konfiguration verwendet wird.
3. Timer erstellen
Erstellen /etc/systemd/system/nextcloudcron.timer:
sudo nano /etc/systemd/system/nextcloudcron.timer
Hinzufügen:
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnBootSec=5 min
OnUnitActiveSec=5 min
Unit=nextcloudcron.service
[Install]
WantedBy=timers.target
OnBootSecDie erste Ausführung wird fünf Minuten nach dem Start von systemd beim Systemstart geplant. OnUnitActiveSecEine weitere Ausführung erfolgt fünf Minuten nach der letzten Aktivierung des Dienstes. Der Timer ist nicht mit dem Dienst selbst identisch: Aktivieren und starten Sie die .timerUnit, damit die geplante Ausführung automatisch erfolgt.
4. Laden Sie systemd neu und aktivieren Sie den Timer.
Weisen Sie systemd an, die neuen Unit-Dateien zu lesen, und aktivieren und starten Sie dann den Timer mit einem einzigen Befehl:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcloudcron.timer
Überprüfen Sie den Timer:
systemctl status nextcloudcron.timer
systemctl list-timers --all | grep nextcloudcron
Der Timer sollte geladen und aktiv sein und list-timersunter „NÄCHSTES“ eine zukünftige Zeit anzeigen. Falls er deaktiviert oder nicht geladen ist oder keine nächste Aktivierung angezeigt wird, überprüfen Sie, ob der Dateiname auf „.js“ endet .timer, der [Install]Abschnitt „.js“ enthält WantedBy=timers.targetund Sie den Timer daemon-reloadnach dem Speichern der Dateien ausgeführt haben.
5. Führen Sie einen Test durch und überprüfen Sie dessen Ergebnis.
Sie können den Dienst einmalig starten, ohne auf den nächsten Timer-Tick warten zu müssen:
sudo systemctl start nextcloudcron.service
sudo systemctl status nextcloudcron.service
sudo journalctl -u nextcloudcron.service -n 50 --no-pager
Prüfen Sie das Ergebnis des Dienstes und eventuelle PHP- oder Nextcloud-Fehler. Nach Abschluss des Befehls nextcloudcron.servicekann es zu einer Fehlermeldung kommen, inactive (dead)da es sich um eine einmalige Aufgabe handelt. Das allein bedeutet nicht, dass der Befehl fehlgeschlagen ist. Der Timer sollte aktiv bleiben und den nächsten Lauf planen; im Protokoll sollte vermerkt sein, ob der vorherige Lauf erfolgreich beendet wurde.
Öffnen Sie in den Nextcloud-Administrationseinstellungen den Bereich „Status von Hintergrundprozessen“ und vergewissern Sie sich, dass die Ausführungszeit des letzten Prozesses nach dem Auslösen des Timers fortschreitet. Die Warnmeldung in der Übersicht sollte verschwinden, sobald Nextcloud kürzlich Hintergrundaktivität erkennt. Warten Sie nach der Aktivierung des Timers mindestens ein Intervall ab, bevor Sie davon ausgehen, dass der Zeitplan nicht ausgeführt wurde.
Diagnostizieren Sie die häufigsten Fehlermuster
| Was Sie sehen | Was zu überprüfen ist | Nächster Schritt |
| Der Timer ist „inaktiv“ oder deaktiviert. | Ob die Zeitschaltuhr aktiviert und gestartet wurde | Ausführen sudo systemctl enable --now nextcloudcron.timer, dann prüfensystemctl list-timers |
| Der Timer ist aktiv, aber der Dienst schlägt fehl. | Das Dienstjournal, die PHP-Ausführungsdatei, der Nextcloud-Pfad und der Dienstbenutzer | Führen Sie den Statustest aus www-data; beheben Sie den ersten gemeldeten PHP- oder Dateiberechtigungsfehler. |
| Der Dienst ist zwischen den Ausführungen inaktiv. | Die nächste Zeit des Timers und der letzte Journaleintrag des Dienstes. | Wenn der Dienst erfolgreich beendet wurde und der Timer weiterhin aktiv ist, ist dies normal für eine einmalige Einheit. |
Der Dienst wird beendet, ohne ausgeführt zu werden.cron.php | Das ExecConditionErgebnis und ob sich Nextcloud im Wartungsmodus befindet | Beheben Sie den Fehler und überprüfen Sie den Nextcloud-Status, bevor Sie den Auftrag manuell neu starten. |
| Die Admin-Seite meldet weiterhin, dass der Cronjob nicht ausgeführt wurde. | Ob der Dienst tatsächlich die richtige Instanz aufruft und ob sich deren letzte Ausführungszeit ändert | Warten Sie ein bestimmtes Zeitintervall ab, überprüfen Sie die Protokolle und stellen Sie sicher, dass Sie dieselbe Nextcloud-Installation überprüfen. |
Für weitere Details überprüfen Sie bitte die aktuellen Dienstprotokolle und die Nextcloud-Protokolldatei:
sudo journalctl -u nextcloudcron.service --since "30 minutes ago" --no-pager
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ background-job:list
Die Aufgabenliste zeigt zwar registrierte Arbeit an, ist aber allein kein Beweis dafür, dass der Timer ausgeführt wird. Verwenden Sie daher gemeinsam die letzte und nächste Aktivierungszeit des Timers, das Dienstjournal und die Anzeige des letzten Laufs in Nextcloud.
Wann sollte ein anderer Zeitplaner verwendet werden?
Systemd-Timer funktionieren gut, wenn der Server systemd verwendet und Sie einen lokalen, vom Dienst verwalteten Zeitplan benötigen. Wenn Sie bereits einen Standard-Cron-Daemon betreiben und dessen Crontab überprüfen können, wird auch ein System-Cron-Eintrag unterstützt, der denselben Aufruf cron.phptätigt www-data. Planen Sie nicht beide Methoden für dieselbe Nextcloud-Instanz; sich überschneidende Aufrufe können Ressourcen verschwenden und die Fehlersuche erschweren.
Die AJAX-Planung ist abhängig von den Zugriffen der Nutzer auf Nextcloud und daher auf stark frequentierten Servern oder Servern mit mehreren Nutzern weniger zuverlässig. Webcron-Aufrufe erfolgen cron.phpüber HTTP und eignen sich möglicherweise für sehr kleine Instanzen, auf denen kein Systemzugriff möglich ist. Nextcloud weist jedoch darauf hin, dass die Webausführung die Menge der pro Aufruf ausführbaren Aufgaben begrenzt. Wenn Nextcloud in einem Container ausgeführt oder von einer Appliance verwaltet wird, verwenden Sie den unterstützten Scheduler oder die Containerkonfiguration. Ein Host-Dienst /var/www/nextcloudfunktioniert nicht, wenn der entsprechende Pfad auf dem Host nicht vorhanden ist.
Eine korrekte Konfiguration zeichnet sich durch einen aktivierten Timer mit wiederkehrender Ausführungszeit, fehlerfreie Dienstausführungen und eine fortlaufende Nextcloud-Letzte-Zeit aus. Sind alle drei Bedingungen erfüllt, aber eine bestimmte App-Aufgabe dennoch verzögert erscheint, kann es sein, dass der Scheduler aktiv ist, während diese Aufgabe auf ihren eigenen Zeitplan, ein Wartungsfenster oder die Einhaltung der Warteschlangenbedingungen wartet. Untersuchen Sie diese Aufgabe separat, bevor Sie das Timer-Intervall ändern.
Offizielle Referenzen