Nextcloud 22: PHP-Cronjobs gestoppt

Nextcloud Hub 22 deaktiviert PHP-Cronjob
Quelle: Nextcloud

Bereits mit dem Update auf Nextcloud 21.0.3.1 erhielt ich im Backend unter Grundeinstellungen die Warnung, dass der PHP-Cronjob, der eigentlich alle fünf Minuten ausgeführt wird, um die Oberfläche zu aktualisieren, nicht funktioniert. Ich habe zunächst wegen fehlender Zeit auf Ajax umgestellt, was aber bei einem viel genutzten System keine Lösung auf Dauer ist. In der Hoffnung, mit NC 22 werde das Problem gelöst wartete ich ab.

Da diese Hoffnung enttäuscht wurde, ging ich dem Problem auf den Grund. Wie sich herausstellte, war dies kein Bug, sondern eine Änderung, die nur versteckt dokumentiert ist. Die Lösung fand sich im Endeffekt in einer Warnung in der Dokumentation zum Caching im Abschnitt APCu. Dort steht:

APCu is disabled by default on CLI which could cause issues with nextcloud’s cron jobs.

Es werden zwei Lösungen vorgeschlagen. Die Zeile apc.enable_cli=1 kann in eine der beiden Dateien /etc/php/7.4/mods-available/apcu.ini oder /etc/php/7.4/cli/php.ini eingetragen werden. Beides hatte bei mir keine Wirkung. Erst das Editieren des Cronjobs selbst behob das Problem. Dazu wird der Cronjob mit dem Befehl sudo crontab -u www-data -e zum Editieren geöffnet und die Option --define apc.enable_cli=1 angehängt. Der Cronjob sieht dann folgendermaßen aus:

*/5  *  *  *  * php -f /var/www/nextcloud/cron.php --define apc.enable_cli=1

Seitdem läuft der PHP-Cronjob wieder alle 5 Minuten. Vielleicht schaut ihr mal bei eurer Nextcloud ins Backend, ob ihr das Problem auch habt.

Kommentare

20 Antworten zu „Nextcloud 22: PHP-Cronjobs gestoppt“

  1. Avatar von Blackcrack
    Blackcrack

    Danke 🙂
    aber das ist doch dann was wegen der Distry und nicht Nextcloud, da das sich dann ja nur bei Nextcloud auswirkt.. Ich hab fedora, mal sehen, wenn ich die php-version update ..oder nachschau.. (iss auf jedenfall sichernswert in odt 🙂 )
    Könntest Du vielleicht mal dazu schreiben welche Distro Du benutzt Ferdi.. Danke.
    liebe Grüße
    Blacky

    1. Avatar von Ferdinand

      Hat mit der Distribution nicht direkt zu tun, sondern mit dem verwendeten LAMP-Stack. Ob das Problem auch schon mit PHP7.3 auftritt, kann ich nicht sagen. Ich habe verschiedene Nextcloud-Instanzen. Eine betroffene Instanz läuft auf einem aktuellen Debian-Server 10, das Gleiche tritt bei einem Ubuntu-Server 21.04 auf. Eine Instanz hier zu Hause mit Docker muss ich nachher noch überprüfen, die muss ich zunächst aktualisieren.

  2. Avatar von Andreas G.
    Andreas G.

    Bei mir hat der Cronjob nach dem Update auf Nextcloud 21 den kompletten Speicher belegt. In den Standardeinstellungen unter Debian ist memory_limit auf -1 (unbegrenzt) gesetzt bei PHP in der Kommandozeile. Es gibt da auch einen entsprechenden Bugreport eines andere Nutzers unter der Nummer #25742.

    Seitdem sieht mein Cronjob so wie oben aus aber ich habe auch noch memory_limit auf 1GB gesetzt um sicher zu gehen das mir der Cronjob nicht wieder den ganzen Speicher belegt.

    1. Avatar von Ferdinand

      Hab gerade mal geschaut. Das Problem habe ich nicht. Wäre vermutlich auch bereits bei der Nutzung aufgefallen.

  3. Avatar von Jakob Meng

    Danke für den Tipp! Bei mir trat das Problem mit Nextcloud 21 und Debian 10 (Buster), also PHP7.3, ebenfalls auf. Nicht nur während der Cron-Jobs, sondern auch, wenn z.B. occ via CLI aufgerufen wird, um den Maintenance Modus zu aktivieren oder ein Upgrade durchzuführen. Geholfen hat folgendes:

    cat << 'EOF' > /etc/php/7.3/cli/conf.d/99-apc-enable-cli.ini
    ; Enable APCu on CLI to e.g. fix issues with Nextcloud’s cron jobs
    ; Ref.: https://docs.nextcloud.com/server/21/admin_manual/configuration_server/caching_configuration.html
    
    apc.enable_cli = 1
    EOF
    
    1. Avatar von Ferdinand

      Offensichtlich gibt es einige Stellen, wo man das eintragen kann, die aber anscheinend nicht überall greifen. Deshalb hab ich es nach zwei erfolglosen Versuchen gleich in den Cronjob eingefügt.

      1. Avatar von Jakob Meng
        Jakob Meng

        Die offizielle Doku zu apc.enable_cli schreibt:

        Mostly for testing and debugging. Setting this enables APC for the CLI
        version of PHP. Under normal circumstances, it is not ideal to create,
        populate and destroy the APC cache on every CLI request, but for
        various test scenarios it is useful to be able to enable APC for the CLI
        version of PHP easily.
        

        Insofern ist das selektive Aktivieren via php –define Parameter je nachdem die bessere Wahl.

  4. Avatar von Jürgen

    Da gibt es sogar einen Bug-Report (https://github.com/nextcloud/vm/issues/2039) für das Problem, in dem dann darauf hingewiesen wurde, dass es sich bereits seit ein paar Server-Versionen in der Dokumentation befindet und somit indirekt das Problem auf den „User“ abgewälzt – also kein Bug, sondern Feature.

    Dass man so eine Umstellung aber gar nicht ankündigt … oder zumindest nicht in einem kleinen Versionssprung von 21.0.2 von 21.0.3 ohne weitere Hinweise implementiert, ist schon ziemlich übel, finde ich.

    Mit jeder Version bläst man das Projekt mit halb fertigen Neuerungen weiter auf, ohne sich um die mehreren hundert alten Bugs zu kümmern oder lang versprochene Funktionen zu liefern. Seitdem man bei Nextcloud die „Eierlegende Wollmilchsau“ werden will, geht es irgendwie abwärts mit dem Projekt.

  5. Avatar von Conrad Beckert
    Conrad Beckert

    Gut zu wissen – Upgrade steht an. Vielen Dank

  6. Avatar von Mike P.
    Mike P.

    Danke für den Tip 🙂
    Das Problem tritt (trat) bei mir seit 22.0.0 auf – Danke für die Lösung – war schon am verzweifeln. Hatte die Einrichtung des Cronjobs in der NC-Dokumetation vorwärts und rückwärts gelesen. Wäre nie auf die Idee gekommen unter Rubrik „APCu“ zu suchen…
    Grüße Mike

    1. Avatar von Ferdinand

      Da kommt man auch mit Logik nicht unbedingt drauf.

  7. Avatar von Reindl Harald
    Reindl Harald

    Und was genau soll apcu in
    Kombination mit cli technisch bringen ausser dass ein sinnloser shm Cache der am Ende des scripts wieder gelöscht wird entsteht?

  8. Avatar von Gugug
    Gugug

    Habe das gleiche Problem unter Nextcloud 22 und php8.0.
    Mit deiner Eintragung unter:
    nano /etc/php/8.0/mods-available/apcu.ini
    dieses eintragen:apc.enable_cli=1
    und dann unter:
    sudo crontab -u www-data -e
    */5 * * * * php -f /var/www/nextcloud/cron.php –define apc.enable_cli=1
    wurde das Problem gelöst. Musste beides tun – nur eines davon hilft nicht.

  9. Avatar von Gugug
    Gugug

    Ich muss noch etwas ergänzen was seltsam ist.
    Ich hatte einen Ordner, der sich nicht löschen ließ. Selbst händisch hatte ich Probleme und dachte es liegt an verschiedenen Synchronisierungen die da laufen hatte. Schon unter der vorherigen php Version war das nicht möglich und dort funktionierte der cron. Jetzt war ein Löschen kein Problem. Wieso hat das Auswirkungen auf die Datenbank? Seltsam….

  10. Avatar von Andre
    Andre

    Super, vielen Dank für die Info!

  11. Avatar von hans-h-e
    hans-h-e

    Dieser Beitrag ist Gold wert! 🙂

  12. Avatar von Andy
    Andy

    Danke für die Infos

  13. Avatar von Martin
    Martin

    Super. Danke für den Tipp.

  14. Avatar von Daniel
    Daniel

    Danke, das ist eine ganz wichtige Info.

    Die Info mit dem Kommandozeilen-Parameter ist hier zu entnehmen: https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html

    Einer der Kommentierenden erwähnte, dass zusätzlich eine ini-Option gesetzt werden muss. Die ini-Datei wird vom aktuellen Docker-Image eigentlich schon entsprechend modifiziert, siehe hier: https://github.com/nextcloud/docker/blob/76b79690dc98fba0d372bea6ecebe9c5235e3776/23/apache/Dockerfile#L102

    Bei mir ging es zwar auch erst, nachdem ich händisch eine ini-Datei modifiziert hatte, aber ich vermute, es lag am Ende eher daran, dass ich den Docker-Container neu gestartet habe. Jedenfalls geht es jetzt endlich wieder.

  15. Avatar von Stephan Fuhrt
    Stephan Fuhrt

    Vielen Dank. Habe da schon einige Zeit verbracht. Dein Tipp hat mir geholfen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert