Ergebnis 1 bis 14 von 14

Thema: [cron] Cronjobs

  1. #1
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard [cron] Cronjobs

    Hi

    Ich habe ein Problem mit der cron-Erweiterung. Nach erfolgreichem ausführen des Jobs, wird kein nextrun mehr eingetragen, obwohl ich "Nur einmal ausführen" abgeschalten habe.

    Bei folgendem Code im CronController.php Zeile 90 steht:
    PHP-Code:
                    if ($cronJob['completed']) {
                        if (
    $cronJob['runonce'])
                            
    $dataset = array(
                                
    'lastrun'    => $currtime,
                                
    'nextrun'    => 0,
                                
    'scheduled'    => 0,
                                
    'enabled'    => '0'
                            
    );
                        else
                            
    $dataset = array(
                                
    'lastrun'    => $currtime,
                                
    'nextrun'    => $this->schedule($q),
                                
    'scheduled'    => $currtime
                            
    );
                        
    $this->Database->prepare("update `tl_cron` %s where id=?")
                            ->
    set($dataset)
                            ->
    $execute($q->id);
                    } 
    // if 
    'nextrun' => $this->schedule($q),: Sollte eigentlich eingetragen werden.

    Ich habe es an einem richtigen Cron angeschlossen. Mein Code:

    PHP-Code:
    class Statistics extends Frontend
    {

        
    /**
         * Initialize
         */
        
    public function  __construct()
        {
            
    $this->import('Database');
            
    $this->import('Environment');        
        }     
        
        
        
    /**
         * Create daily member information
         */
        
    public function createDailyMemberInformation()
        {        
            
    // Check wether today is the last day of the year
            
    (date('d-m') == '31-12') ? $blnLastDayOfTheYear true $blnLastDayOfTheYear false;
            
    // Check wehter today is the last day of the month
            
    (date('d') == date('t')) ? $blnLastDayOfTheMonth true $blnLastDayOfTheMonth false;
            
            
    $objMembers $this->Database->prepare("SELECT COUNT(*) AS total FROM tl_member WHERE login=1")->execute();        
                                         
            
    // Data
            
    $arrData['tstamp'] = time();    
            
    $arrData['members'] = $objMembers->total;    
            
    $arrData['lastDayOfTheMonth'] = $blnLastDayOfTheMonth;
            
    $arrData['lastDayOfTheYear'] = $blnLastDayOfTheYear;        
            
            
    $insertId $this->Database->prepare("INSERT INTO tl_statistics %s")->set($arrData)->execute()->insertId;    
            
            
    // Log
            
    $this->log('A new daily member information (ID ' $insertId ') was created''ModuleStatistic createDailyMemberInformation()'TL_CRON);            
        }
        
        
    $objStatistics = new Statistics();
    $objStatistics->createDailyMemberInformation(); 
    Hat jemand ne Ahnung was ich falsch gemacht habe oder warum kein nextrun eingetragen wird?

  2. #2
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Hat niemand eine Idee?

  3. #3
    Contao-Fan Avatar von acenes
    Registriert seit
    13.06.2009.
    Beiträge
    407

    Standard

    Irgendwelche Fehler wenn CronCorntroller.php manuell aufgerufen wird?
    Erweiterungen: avatar, cron, dlstats, editarea, geshi, helpdesk, recall, rep_*, smhcheck.
    (Bitte keine Supportanfragen per PM oder E-Mail)

  4. #4
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Nein, gar keine. Die Seite ist ganz weiss.

  5. #5
    Contao-Fan Avatar von acenes
    Registriert seit
    13.06.2009.
    Beiträge
    407

    Standard

    Funktioniert denn der Bespielsscript PurgeLog.php korrekt, d.h. wird dort ein neuer nexrun eingetragen?

    Falls ja solltest du dein Script vielleicht ebenfalls mal von Backend ableiten statt von Frontend, wie im Beispielscript.
    Erweiterungen: avatar, cron, dlstats, editarea, geshi, helpdesk, recall, rep_*, smhcheck.
    (Bitte keine Supportanfragen per PM oder E-Mail)

  6. #6
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Ja es funktioniert. Wenn ich mein Script alle Minuten (* * * * * *) ausführen lasse, wird ein nextrun eingetragen, aber nicht, wenn ich es alle Tage (0 0 * * * *) ausführen lassen möchte. Liegt das an der manuellen bzw. maschinellen Ausführung? Sollte ja nicht.

  7. #7
    Contao-Fan Avatar von acenes
    Registriert seit
    13.06.2009.
    Beiträge
    407

    Standard

    Also nachdem du den Fahrplan geändert und abgespeichert hast, solltest du das Backend nochmal refreshen damit nextrun berechnet wird. Falls das nicht passiert ist definitiv bei dir etwas faul. Du hast doch nichts an der Erweiterung geändert, oder? Sonst vielleicht mal in der Erweiterungsverwaltung einen Repair starten (update Button).
    Erweiterungen: avatar, cron, dlstats, editarea, geshi, helpdesk, recall, rep_*, smhcheck.
    (Bitte keine Supportanfragen per PM oder E-Mail)

  8. #8
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Im Backend funktioniert es, wenn ich speichere und refereshe. Im Frontend funktionert es auch, wenn ich es alle Minuten ausführen lasse. Es funktioniert aber nicht im FE, wenn ich es nur alle Tage ausführen lassen möchte. Dann wird kein nextrun eingetragen. Keine Ahnung warum.

    Ich habe es gestern Abend nochmals versucht und im BE nochmals abgespeichert. Es hat sich alles eingetragen, auch nextrun. Nachdem es aber ausgeführt wurde, wurde kein nextrun mehr eingetragen. Heute sieht es nun so aus:
    Code:
    Statistics
    Minute
    0
    Stunde
    0
    Tag im Monat
    *
    Monat
    *
    Wochentag
    *
    Letzte Ausührung
    20.08.2010 00:00
    Nächste Ausführung
    Geändert von Dani (20.08.2010 um 11:42 Uhr)

  9. #9
    Contao-Fan Avatar von acenes
    Registriert seit
    13.06.2009.
    Beiträge
    407

    Standard

    Ich habe gestern ebenfalls mal den PurgeLog mit 0 0 * * * aufgesetzt, bei mir hat es allerdings einwandfrei funktioniert und den nextrun korrekt berechnet und eingesetzt (Contao 2.9.1, Cron 1.1.0).

    Nextrun wird gelöscht wenn entweder nur die einmalige Ausführung gesetzt wurde, oder innerhalb eines Jahres kein nächster Termin bestimmt werden konnte. Kontrolliere mal das Systemlog und die Logdateien ob dort noch irgendeine Info vorhanden ist. Ev. kannst du selber noch zusätzliche Logs einbauen um das Problem einzugrenzen.
    Erweiterungen: avatar, cron, dlstats, editarea, geshi, helpdesk, recall, rep_*, smhcheck.
    (Bitte keine Supportanfragen per PM oder E-Mail)

  10. #10
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Ich habe folgendes in die CronController.php eingetragen:
    PHP-Code:
                    if ($cronJob['completed']) {
                        if (
    $cronJob['runonce'])
                            
    $dataset = array(
                                
    'lastrun'    => $currtime,
                                
    'nextrun'    => 4,
                                
    'scheduled'    => 0,
                                
    'enabled'    => '0'
                            
    );
                        else
                            
    $dataset = array(
                                
    'lastrun'    => $currtime,
                                
    'nextrun'    => $this->schedule($q) ? $this->schedule($q) : 3,
                                
    'scheduled'    => $currtime
                            
    ); 
    Und es hat mir zweimal eine 3 eingetragen. Bei PurgeLog und Statistic. Warum wird hier bei verschiedenen Fällen eine 0 returnt:
    PHP-Code:
                $allhours = ($_hours==0);
                while (
    $_hours 24) {
                    if (
    $hour[$_hours]) {
                        
    $allminutes = ($_minutes==0);
                        while (
    $_minutes 60) {
                            if (
    $minute[$_minutes]) return $nextrun;
                            
    // increment to next minute
                            
    $nextrun += 60-$_seconds;
                            
    $_minutes++;
                            
    $_seconds 0;
                        } 
    // while
                        
    if ($allminutes) return 0;
                        
    $_hours++;
                        
    $_minutes 0;
                    } else {
                        
    // increment to next hour
                        
    $nextrun += 60*(60-$_minutes)-$_seconds;
                        
    $_hours++;
                        
    $_minutes $_seconds 0;
                    } 
    // if
                
    // while
                
    if ($allhours) return 0;
            } 
    // while
            
    return 0;
        } 
    // schedule 

  11. #11
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Ich habe mal versucht bei Stunde */24 anstatt eine 0 einzusetzen, das hat aber auch nicht funktioniert. Im Gegenzug funktioniert */12. Hast du vielleicht nochmals eine Idee, an was das legen könnte?

    Noch paar Informationen:
    - Die CronController.php wird alle 15 Minuten via "echtem Cron" aufgerufen
    - Es werden in der Statistics.php-Datei gleich 5 Funktionen aufgerufen.
    PHP-Code:
    $objStatistics = new Statistics();
    $objStatistics->createDailyMemberInformation();
    $objStatistics->createDailyHelperInformation();
    $objStatistics->createDailyClientInformation();
    $objStatistics->createDailyProjectInformation();
    $objStatistics->createDailyIdeaInformation(); 
    - Es erscheinen keine Fehler beim Aufruf der CronController.php

  12. #12
    Contao-Fan Avatar von acenes
    Registriert seit
    13.06.2009.
    Beiträge
    407

    Standard

    Wenns manchmal geht und manchmal nicht, tippe ich darauf dass die Gesamtlaufzeit manchmal höher ist als in den PHP Einstellungen erlaubt und der Server den Prozess dann abwürgt bevor die neue Schedulezeit berechnet werden kann. In diesem Fall könnte es helfen die einzelnen Aktionen auf verschiedene Cron-Jobs zu verteilen (oder wenns etwas luxuriöser sein darf den Script wie in der Doku beschrieben scheibchenweise abzuarbeiten[*], Stichwort "well behaved batches").
    [*] Ich kicke den Croncontroller jede Minute via echtem CRON an, das erlaubt die zügigere Abarbeitung der Scheiben.
    Erweiterungen: avatar, cron, dlstats, editarea, geshi, helpdesk, recall, rep_*, smhcheck.
    (Bitte keine Supportanfragen per PM oder E-Mail)

  13. #13
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Ich glaub es liegt nicht an dem. Ich habe jetzt mal versucht nur eine Funktion aufzurufen. Es funktioniert so aber auch nicht.
    Das Komische ist, dass es ja bei */12 immer geht nur bei 0 oder */24 funktioniert es nicht. Kann es nicht sein, dass es am Modul liegt, vielleicht irgendwo einen Fehler? In der shedule-Fkt.?

  14. #14
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Es tut mir Leid, dass ich nochmals störe. Es funktioniert aber immer noch nicht. Ich habe versucht, es alle 23 Stunden laufen zu lassen. Dies habe ich sicher 4 probiert und es hat immer funktioniert. Möchte ich es aber alle 24 Stunden laufen lassen, funktioniert es nicht. Ich habe keine Ahnung warum. Ich habe es jetzt gleichzeitig auch mit PurgeLog.php probiert. Es hat aber bei "alle 24 Stunden" auch nicht funktioniert.

    Ich wäre dir sehr dankbar, wenn du das nochmals anschauen könntest. Könnte es nicht sein, dass es ein Fehler im Code hat?

    Ich danke dir für deine Hilfe!

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Frage zu cron.php
    Von rolf_K im Forum Sonstiges zu Contao
    Antworten: 8
    Letzter Beitrag: 02.01.2014, 23:44
  2. Benötigt Contao zwingend Cronjobs?
    Von Holla im Forum Installation / Update
    Antworten: 2
    Letzter Beitrag: 04.08.2010, 10:42
  3. Anpassung des FE-Maintemplates für Cronjobs
    Von TLight im Forum Layout / Templates / Holy Grail
    Antworten: 2
    Letzter Beitrag: 10.01.2010, 13:28
  4. Cronjobs werden nicht mehr ausgeführt
    Von Kahmoon im Forum Sonstige Erweiterungen
    Antworten: 0
    Letzter Beitrag: 28.10.2009, 11:12
  5. cron.php Webstatistik
    Von nmk im Forum Sonstiges zu Contao
    Antworten: 2
    Letzter Beitrag: 03.09.2009, 16:27

Lesezeichen

Lesezeichen

Berechtigungen

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