Ergebnis 1 bis 18 von 18

Thema: Cronjob testen: Wie komme ich an PHP-Fehler o.ä.

  1. #1
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.856

    Frage Cronjob testen: Wie komme ich an PHP-Fehler o.ä.

    Ich habe folgende PHP-Datei als Cron-service registriert:
    PHP-Code:
    <?php

    namespace Schachbulle\ContaoFernschachBundle\Cron;

    use 
    Contao\Config;
    use 
    Contao\CoreBundle\Framework\ContaoFramework;
    use 
    Contao\CoreBundle\ServiceAnnotation\CronJob;

    /**
     * Provide methods to run automated jobs.
     *
     * @author Leo Feyer <https://github.com/leofeyer>
     */
    class Nenngeld
    {
        private 
    ContaoFramework $framework;

        
    /**
         * Make the constuctor public
         */
        
    public function __construct(ContaoFramework $framework)
        {
        }

        
    /**
         * @CronJob("minutely")
         */
        
    public function onMinutely(): void
        
    {
            
    // Nenngeldprüfung ausführen
            
    $nenngeldpruefung 'Nenngeldkonten-Prüfung fehlgeschlagen';
            
    $ergebnis = \Schachbulle\ContaoFernschachBundle\Classes\Konto\Nenngeld::getNegativ();
            if(
    $ergebnis)
            {
                
    $nenngeldpruefung 'Nenngeldkonto negativ: <span style="color:red;">'.$ergebnis['summe_alle'].' € bei '.$ergebnis['anzahl_alle'].' veröffentlichten Spielern</span>';
                
    $nenngeldpruefung .= ' / davon <span style="color:red;">'.$ergebnis['summe_mitglieder'].' € bei '.$ergebnis['anzahl_mitglieder'].' Mitgliedern</span>';
            }
            
            
    $file TL_ROOT.'/vendor/schachbulle/contao-fernschach-bundle/src/Resources/nenngeld.txt';
            
    file_put_contents($file$nenngeldpruefung);

            
    // Log-Eintrag vornehmen
            
    \System::getContainer()->get('monolog.logger.contao.cron')->info('[Fernschach-Wartung] Nenngeld-Konten wurden überprüft');
            
        }

    }
    Kommentiere ich die Zeile
    PHP-Code:
    $ergebnis = \Schachbulle\ContaoFernschachBundle\Classes\Konto\Nenngeld::getNegativ(); 
    aus, steht im System-Log der gewünschte Eintrag. Lasse ich die Zeile abarbeiten, erscheint kein Eintrag im System-Log. Der Funktionsaufruf funktioniert in einer anderen Datei, sollte also auch hier funktionieren. Fehlermeldungen bekomme ich keine. Contao arbeitet im Frontend den Cronjob scheinbar ohne Probleme ab. Aber im System-Log kommt davon nichts an. Also müssen Fehler aufgetreten sein. Wie komme ich da ran?

    Ergänzung:
    Führe ich vendor/bin/contao-console contao:cron aus, ist der Eintrag im System-Log da. Ein Ressourcen-Problem?
    Geändert von Samson1964 (10.12.2025 um 17:28 Uhr)
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.976
    Partner-ID
    10107

    Standard

    Wie lässt du denn deine Cronjobs ausführen?
    » sponsor me via GitHub or Revolut

  3. #3
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.856

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wie lässt du denn deine Cronjobs ausführen?
    Über die src/Resources/config/services.yml:
    PHP-Code:
        contao.cron.fernschach_mitgliederpruefung:
            class: 
    Schachbulle\ContaoFernschachBundle\Cron\Mitgliederpruefung
            arguments
    :
                - 
    '@contao.framework'

        
    contao.cron.fernschach_nenngeld:
            class: 
    Schachbulle\ContaoFernschachBundle\Cron\Nenngeld
            arguments
    :
                - 
    '@contao.framework' 
    Ich bastele noch an einem zweiten Cronjob. Nenngeld läuft problemlos jetzt durch. Mitgliederpruefung geht in den Konstruktor rein und manchmal noch in die onMinutely-Funktion. Ich habe testweise was im Log ausgeben lassen. Leider läuft die onMinutely-Funktion nicht durch. PHP-Fehler kommen nicht, auch wenn ich welche einbaue. Mit
    PHP-Code:
    vendor/bin/contao-console contao:cron 
    sieht man die PHP-Fehler, wie ich jetzt herausgefunden habe.

    Fazit z.Z.: Nenngeld läuft, Mitgliederpruefung läuft nur mit den ersten Zeilen der onMinutely-Funktion - aber auch nur manchmal. Liegt vielleicht daran, das dort viel mehr Code steht.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.976
    Partner-ID
    10107

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Über die src/Resources/config/services.yml:
    Nein, das habe ich nicht gemeint. Wie lässt du die Cronjobs in Contao ausführen? Hast du einen minütlichen crontab eingerichtet?
    » sponsor me via GitHub or Revolut

  5. #5
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.856

    Standard

    /**
    * @CronJob("minutely")
    */
    public function onMinutely(): void
    {
    Ja, in meiner Entwicklungsumgebung. Frontend verwende ich kaum. Ich startete zuletzt meistens in der Konsole.

    Deine Fragestellung suggeriert mir, das minütliche Jobs sehr schnell abgebrochen werden?!
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.976
    Partner-ID
    10107

    Standard

    Nein, das beantwortet die Frage immer noch nicht . Wie lässt du den Contao Cronjob in deiner Live Umgebung oder wo auch immer ausführen? Oder verlässt du dich nur auf den Poor-man's-cron von Contao?
    » sponsor me via GitHub or Revolut

  7. #7
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.674
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich tippe mal auf TL_ROOT, das gibt es nämlich nicht mehr ab Contao 5.

  8. #8
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.856

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Nein, das beantwortet die Frage immer noch nicht . Wie lässt du den Contao Cronjob in deiner Live Umgebung oder wo auch immer ausführen? Oder verlässt du dich nur auf den Poor-man's-cron von Contao?
    Im Live-Web sollte der Cronjob seit gestern Abend laufen. Aber bisher scheint er kein einziges Mal gelaufen zu sein. In der Entwicklungsumgebung reichte ein Aufruf einer Seite im Frontend, um den Cronjob auszuführen. Ich habe nur meine bereits zitierte services.yml und Nenngeld.php (Mitgliederpruefung.php). Der Frontend-Cron ist nicht deaktiviert.

    Einen echten Cronjob, der vom Server ausgeführt wird, habe ich nicht aktiviert. Das geht bei All-Inkl auch nicht, weil die nur über http erreichbare PHP-Skripte erlauben: https://all-inkl.com/wichtig/anleitu...htung_479.html. Da müßte ich ein öffentliches PHP-Skript erstellen, was via exec die Konsole aufruft.
    Geändert von Samson1964 (11.12.2025 um 06:34 Uhr)
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.976
    Partner-ID
    10107

    Standard

    Das heißt, du verlässt dich also nur auf den Poor-man's-cron, richtig?
    » sponsor me via GitHub or Revolut

  10. #10
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.856

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das heißt, du verlässt dich also nur auf den Poor-man's-cron, richtig?
    Ja darauf verlasse ich mich. Und laut tl_cron_job werden die beiden Cronjobs auch regelmäßig ausgeführt. Allerdings scheint außer dem Aufruf nichts zu passieren. Es wird nichts ins System-Log geschrieben und auch die vom Job zu erstellende Dateien wird nicht angelegt. Die Cronjobs werden also aufgerufen, aber es wird rein gar nichts gemacht.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.976
    Partner-ID
    10107

    Standard

    Hast du Einträge in var/logs/? Oder Einträge im PHP Error Log? Was genau macht denn diese getNegativ() Funktion und wie lange dauert die?
    » sponsor me via GitHub or Revolut

  12. #12
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.856

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Hast du Einträge in var/logs/? Oder Einträge im PHP Error Log? Was genau macht denn diese getNegativ() Funktion und wie lange dauert die?
    Ich habe Nenngeld.php modifiziert in der Entwicklungsumgebung:
    PHP-Code:
            \System::getContainer()->get('monolog.logger.contao.cron')->info('[Fernschach-Wartung] Zeitmessung startet');
            
    $time_start microtime(true); 
            
    $ergebnis = \Schachbulle\ContaoFernschachBundle\Classes\Konto\Nenngeld::getNegativ();
            
    $time_end microtime(true);
            
    $time $time_end $time_start;
            \
    System::getContainer()->get('monolog.logger.contao.cron')->info('[Fernschach-Wartung] Dauer getNegativ in Sekunden: '.$time); 
    Beim Start via console contao-cron kommen keine Fehlermeldungen. Nenngeld wird aber trotzdem nur unvollständig abgearbeitet. Das "Zeitmessung startet" habe ich meistens im System-Log drin, die Ausgabe der Laufzeit (ca. 0,12 sec) kommt seltener. Der Cronjob verreckt also meistens innerhalb der Funktion getNegativ, die mehrere Tausend Datensätze prüft. Wenn die Ausgabe der Laufzeit im System-Log ist, läuft der Rest des Codes auch normal durch und erreicht auch die letzte Codezeile, die was ins System-Log schreibt.

    Unter var/logs tauchen nach unvollständigen Requests folgende Zeilen auf:
    Code:
    app.ERROR: ErrorException: Warning: Attempt to read property "server" on null in /vendor/contao/core-bundle/src/Resources/contao/classes/Versions.php:796 Stack trace: #0 /vendor/contao/core-bundle/src/Resources/contao/classes/Versions.php(222): Contao\Versions->getEditUrl() #1 /vendor/schachbulle/contao-fernschach-bundle/src/Cron/Mitgliederpruefung.php(84): Contao\Versions->create() #2 /vendor/contao/core-bundle/src/Cron/CronJob.php(44): Schachbulle\ContaoFernschachBundle\Cron\Mitgliederpruefung->onMinutely() #3 /vendor/contao/core-bundle/src/Cron/Cron.php(136): Contao\CoreBundle\Cron\CronJob->__invoke() #4 /vendor/contao/core-bundle/src/EventListener/CommandSchedulerListener.php(47): Contao\CoreBundle\Cron\Cron->run() #5 /vendor/symfony/event-dispatcher/Debug/WrappedListener.php(118): Contao\CoreBundle\EventListener\CommandSchedulerListener->__invoke() #6 /vendor/symfony/event-dispatcher/EventDispatcher.php(230): Symfony\Component\EventDispatcher\Debug\WrappedListener->__invoke() #7 /vendor/symfony/event-dispatcher/EventDispatcher.php(59): Symfony\Component\EventDispatcher\EventDispatcher->callListeners() #8 /vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php(154): Symfony\Component\EventDispatcher\EventDispatcher->dispatch() #9 /vendor/symfony/http-kernel/HttpKernel.php(97): Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher->dispatch() #10 /vendor/symfony/http-kernel/Kernel.php(159): Symfony\Component\HttpKernel\HttpKernel->terminate() #11 /web/index.php(48): Symfony\Component\HttpKernel\Kernel->terminate() #12 {main} [] []
    request.CRITICAL: Uncaught PHP Exception ErrorException: "Warning: Attempt to read property "server" on null" at /vendor/contao/core-bundle/src/Resources/contao/classes/Versions.php line 796 {"exception":"[object] (ErrorException(code: 0): Warning: Attempt to read property \"server\" on null at /vendor/contao/core-bundle/src/Resources/contao/classes/Versions.php:796)"} []
    Ergänzung: Wenn ich den Code nicht über Contao-Cron abarbeiten lasse, sondern z.B. bei einem Aufruf im Backend (im DCA über einen onload_callback) läuft alles immer sauber durch.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  13. #13

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.976
    Partner-ID
    10107

    Standard

    Zitat Zitat von do_while Beitrag anzeigen
    Ich tippe mal auf TL_ROOT, das gibt es nämlich nicht mehr ab Contao 5.
    Das ist nicht das Problem, hier geht es um Contao 4.13. Besser wäre es natürlich dennoch man nutzt %kernel.project_dir%.
    » sponsor me via GitHub or Revolut

  15. #15
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.856

    Standard

    Ich prüfe jetzt mal die im Cronjob aufgerufenen Funktionen. Nenngeld erzeugt irgendwo ein "Failed to start the session because headers have already been sent" und bei Mitgliederpruefung steht "app.ERROR: ErrorException: Warning: Attempt to read property "server" on null" in var/logs.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  16. #16
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.856

    Standard

    Den Fehler in der Funktion getNegativ habe ich gefunden. Ich greife via
    PHP-Code:
    \Contao\Session::getInstance()->getData() 
    auf die Sitzung zu, um z.B. den DCA-Filter zu ermitteln. Diese Sitzung gibt es aber sicherlich nicht bei einem Cronjob. Als onload_callback hat das wunderbar funktioniert.

    Jetzt muß ich noch dem Fehler
    Code:
    Attempt to read property "server" on null"
    auf die Schliche kommen.

    Danke Spooky für den Support! Ich glaube jetzt komme ich allein weiter.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.976
    Partner-ID
    10107

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Diese Sitzung gibt es aber sicherlich nicht bei einem Cronjob.
    Genau, ja. Cronjobs müssen immer komplett ohne Request auskommen.


    Zitat Zitat von Samson1964 Beitrag anzeigen
    Jetzt muß ich noch dem Fehler
    Code:
    Attempt to read property "server" on null"
    auf die Schliche kommen.
    Same here, die Fehlermeldung suggeriert, dass du in einer Funktion irgendwo den aktuellen Request holst - den es ja in einem Cronjob nicht unbedingt gibt. Bzw. dein Code ruft anderen Code auf, wo das dann passiert.
    » sponsor me via GitHub or Revolut

  18. #18
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.856

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Genau, ja. Cronjobs müssen immer komplett ohne Request auskommen.


    Same here, die Fehlermeldung suggeriert, dass du in einer Funktion irgendwo den aktuellen Request holst - den es ja in einem Cronjob nicht unbedingt gibt. Bzw. dein Code ruft anderen Code auf, wo das dann passiert.
    In dem Fall habe ich aufgerufen:
    PHP-Code:
    $version = new \Versions('tl_member'$objMember->id);                        
    $version->setUsername($GLOBALS['TL_LANG']['fernschachverwaltung']['botname']);
    $version->create(); 
    Ich habe alle diese Codezeilen auskommentiert. Danach hat der Cronjob wunderbar funktioniert.
    Aber eigentlich würde ich gern als "Bot" eine Versionierung des bearbeiteten Datensatzes machen. Ist das trotzdem möglich?
    Stacktrace einer Fehlermeldung:
    Code:
    app.ERROR: ErrorException: Warning: Attempt to read property "server" on null in /vendor/contao/core-bundle/src/Resources/contao/classes/Versions.php:796 Stack trace: 
    #0 /vendor/contao/core-bundle/src/Resources/contao/classes/Versions.php(222): Contao\Versions->getEditUrl() 
    #1 /vendor/schachbulle/contao-fernschach-bundle/src/Cron/Mitgliederpruefung.php(108): Contao\Versions->create() 
    #2 /vendor/contao/core-bundle/src/Cron/CronJob.php(44): Schachbulle\ContaoFernschachBundle\Cron\Mitgliederpruefung->onMinutely() 
    #3 /vendor/contao/core-bundle/src/Cron/Cron.php(136): Contao\CoreBundle\Cron\CronJob->__invoke() 
    #4 /vendor/contao/core-bundle/src/EventListener/CommandSchedulerListener.php(47): Contao\CoreBundle\Cron\Cron->run() 
    #5 /vendor/symfony/event-dispatcher/Debug/WrappedListener.php(118): Contao\CoreBundle\EventListener\CommandSchedulerListener->__invoke() 
    #6 /vendor/symfony/event-dispatcher/EventDispatcher.php(230): Symfony\Component\EventDispatcher\Debug\WrappedListener->__invoke() 
    #7 /vendor/symfony/event-dispatcher/EventDispatcher.php(59): Symfony\Component\EventDispatcher\EventDispatcher->callListeners() 
    #8 /vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php(154): Symfony\Component\EventDispatcher\EventDispatcher->dispatch() 
    #9 /vendor/symfony/http-kernel/HttpKernel.php(97): Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher->dispatch() 
    #10 /vendor/symfony/http-kernel/Kernel.php(159): Symfony\Component\HttpKernel\HttpKernel->terminate() 
    #11 /web/index.php(48): Symfony\Component\HttpKernel\Kernel->terminate() #12 {main} [] []
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •