Ergebnis 1 bis 24 von 24

Thema: Cron Jobs

  1. #1
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard Cron Jobs

    Guten Morgen,

    ich suche ne Anleitung, wie man die Contao-Internen CronJobs anlegt und verwaltet. Contao 3.5.2

    Ich hab folgendes in meinem Modul (config.php):
    PHP-Code:
    $GLOBALS['TL_CRON']['daily'][]  = array('RothCron''checkGebrauchtmarkt'); 
    Eine Datei RothCron.php mit:
    PHP-Code:
    namespace xxxxxx;

    class 
    RothCron extends \System
    {
        public function 
    checkGebrauchtmarkt() 
        {
                
    alert ("daily");die;
        }

    Und die entsprechenden Einträge in der autoload.php:

    PHP-Code:
    ClassLoader::addClasses(array
    (
        
    'xxxxxx\RothCron'  => 'system/modules/x_roth/RothCron.php',
    )); 

    Wird aber nicht ausgeführt.

    Ich könnte alternativ auch einen echten Cron-Job anlegen. Auf welche Datei muss der
    dann zeigen?

    Danke für Tipps.
    Gruß
    Michel

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

    Standard

    Zitat Zitat von Lengen1971 Beitrag anzeigen
    Wird aber nicht ausgeführt.
    Woher weißt du das? "alert()" ist keine PHP Funktion. Und selbst wenn du sowas wie
    PHP-Code:
    echo "Hello World!"
    hinein schreibst, wirst du nichts davon sehen. Du könntest statt dessen das Logging benutzen, um herauszufinden ob der Cron Job ausgeführt wird:
    PHP-Code:
    $this->log('Hello World!'__METHOD__TL_CRON); 

  3. #3
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    "alert()" ist keine PHP Funktion
    Sry, arggg. Montag.

    $this->log('Hello World!', __METHOD__, TL_CRON);
    OK, is drin, wird aber nichts geloggt.

    Irgendwo is ein Ei. Muss ich der DB irgendwo sagen, dass eben grad heute noch nichts ge-croned wurde??

    Grüße
    Michel

  4. #4
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    OK, jetzt geht´s. Mann muss 1 Datei und die Einträge in der tl_cron löschen um das zu testen.

    Grüße

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

    Standard

    Zitat Zitat von Lengen1971 Beitrag anzeigen
    OK, jetzt geht´s. Mann muss 1 Datei und die Einträge in der tl_cron löschen um das zu testen.
    Ja, ist logisch. Wenn dein Cron Job 'daily' aufgerufen wird und der Cron Job heute schon mal gestartet wurde, dann würde dein Job erst wieder morgen ausgeführt werden, sofern du den Status nicht zurücksetzt.

  6. #6
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Hi,

    ja, wissen mus man´n halt, was wo zu löschen ist zum Testen. Wie immer muss man da rumgoogeln um da Hinweise zu finden.

    Abgesehen davon hatt ich´s vorher schon auf 'minutely' gesetzt, wird aber jetzt nicht mehr ausgeführt, tl_cron bleibt leer, cron.txt
    wird gar nicht mehr angelegt.

    Naja, bastel ich halt weiter.

    VG
    Michel

  7. #7
    Contao-Fan Avatar von WilhelmTell
    Registriert seit
    12.12.2014.
    Beiträge
    316

    Standard

    Zitat Zitat von Lengen1971 Beitrag anzeigen
    ich suche ne Anleitung, wie man die Contao-Internen CronJobs anlegt und verwaltet
    Zitat Zitat von Lengen1971 Beitrag anzeigen
    Naja, bastel ich halt weiter.
    Wenn Du fertig bist mit Basteln, kannst Du ja mal 'ne kleine Anleitung posten (ist aber nicht überlebenswichtig. Ich würde auch gerne basteln wollen, aber mit Anleitung wäre ich mehr motiviert.
    Danke im Voraus
    Klaus

  8. #8
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.514
    User beschenken
    Wunschliste

    Standard

    Hmm, ich nehme da einfach eine der Contao Jobs und schaue nach wie das geht.
    Wenn du zum Testen nicht immer die Datei und tl_cron löschen willst, dann installiere dir die Erweiterung cron_info
    https://contao.org/de/erweiterungsli...n_info.de.html

    Da kannste jeden einzelnen registrierten Job direkt starten aus dem Backend heraus.
    Geändert von BugBuster (03.08.2015 um 19:50 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  9. #9
    Contao-Fan Avatar von WilhelmTell
    Registriert seit
    12.12.2014.
    Beiträge
    316

    Standard

    Zitat Zitat von BugBuster Beitrag anzeigen
    Hmm, ich nehme da einfach eine der Contao Jobs
    Da fängt's bei mir schon an zu haken. Wo nehme ich "einfach" eine der Contao Jobs her ?

  10. #10
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.514
    User beschenken
    Wunschliste

    Standard

    Das sind die registrierten Jobs in Contao:
    PHP-Code:
    /**
     * Cron jobs
     */
    $GLOBALS['TL_CRON'] = array
    (
        
    'monthly' => array
        (
            array(
    'Automator''purgeImageCache')
        ),
        
    'weekly' => array
        (
            array(
    'Automator''generateSitemap'),
            array(
    'Automator''purgeScriptCache'),
            array(
    'Automator''purgeSearchCache')
        ),
        
    'daily' => array
        (
            array(
    'Automator''rotateLogs'),
            array(
    'Automator''purgeTempFolder'),
            array(
    'Automator''checkForUpdates')
        ),
        
    'hourly' => array(),
        
    'minutely' => array()
    ); 
    Das array besteht aus Klasse - Methode.
    Die Klasse Automator findet man hier
    https://github.com/contao/core/blob/.../Automator.php
    Darin die Methoden die registrierten CronJob Methoden.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  11. #11
    Contao-Fan Avatar von WilhelmTell
    Registriert seit
    12.12.2014.
    Beiträge
    316

    Standard

    Vielen Dank !
    Ich hol' mir erst mal schnell meine Herztropfen...
    Das war zu viel für mich.

  12. #12
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.514
    User beschenken
    Wunschliste

    Standard

    Grob gesagt: in system/modules/meincronjob/
    Code:
    config/config.php - hier die Registrierung
    config/autoload.ini   - später generieren lassen
    config/autoload.php - später generieren lassen
    MeineKlasse.php  - Deine Klasse mit deiner Methode
    MeineKlasse.php grob (ohne Namespace der einfach halt halber)
    PHP-Code:
    <php

    class MeineKlasse extends System
    {

        
    /**
         * Make the constuctor public
         */
        
    public function __construct()
        {
            
    parent::__construct();
        }

        public function 
    machWas()
        {
        
    //Deine Dinge die zu tun sind

        
    }



    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  13. #13
    Contao-Fan Avatar von WilhelmTell
    Registriert seit
    12.12.2014.
    Beiträge
    316

    Standard

    Jetzt schnall' ich laaangsam...

  14. #14
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Moin,
    auch bei mir funzts jetzt, hier mal meine Version:

    /system/modules/meinModul/config/config.php:
    PHP-Code:
    $GLOBALS['TL_CRON']['daily'][]  = array('RothCron''checkGebrauchtmarkt'); 
    /system/modules/meinModul/config/autoload.php:
    PHP-Code:
    ClassLoader::addNamespaces(array
    (
        
    'meinNamespace',
    ));


    /**
     * Register the classes
     */
    ClassLoader::addClasses(array
    (
        
    'meinNamespace\RothCron'  => 'system/modules/x_roth/RothCron.php',
    )); 
    /system/modules/meinModul/RothCron.php:
    PHP-Code:
    namespace meinNamespace;

    class 
    RothCron extends \System
    {
        public function 
    checkGebrauchtmarkt() 
        {
                  
    $this->log('Ausgeführt'__METHOD__TL_CRON);
                 
    //was immer es zu tun gibt
        
    }


  15. #15
    Contao-Nutzer
    Registriert seit
    20.11.2013.
    Beiträge
    202

    Standard

    Brauche das auch gerade.

    Was heißt:
    Zitat Zitat von Lengen1971 Beitrag anzeigen
    Mann muss 1 Datei und die Einträge in der tl_cron löschen um das zu testen.
    Welche Datei und und wie die Einträge in der tl_cron (einfach die timestamps entfernen?) löschen?

    Viele Grüße
    hippo

  16. #16
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Moin,

    unter /system/cron/ die cron.txt

    und in der DB tabelle: tl_cron den Eintrag für 'daily' (z. B.) löschen.

    Ich hab zum Testen den Cron auf 'minutely' gestelle, das Löschen hat mich gestreßt. Eigentlich kann man
    zum Testen auch eher einen anderen Hook nehmen, der eh immer ausgeführt wird, äh z. B. generatePage...

  17. #17
    Contao-Nutzer
    Registriert seit
    20.11.2013.
    Beiträge
    202

    Standard

    Super - klappt!

    PHP-Code:
    $this->log('Ausgeführt'__METHOD__TL_CRON); 
    müsste dann mit der Methode CronJobs run() ausgeführt werden?

    PHP-Code:
    $this->log('Ausgeführt''CronJobs run()'TL_CRON); 
    EDIT: Wie hier dokumentiert. Außerdem ist interessant zu wissen, dass minütliche cron jobs nur im Debug Modus geloggt werden.
    Geändert von hippo (19.08.2015 um 10:40 Uhr)

  18. #18
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    ... versteh ich jetzt nicht, was du meinst.

    Bei mir werden die Cron-Jobs minütlich (spätestens, wenn jemand die Seite öffnet) ausgeführt und geloggt.

  19. #19
    Contao-Nutzer
    Registriert seit
    20.11.2013.
    Beiträge
    202

    Standard

    Ah ok - vielleicht habe ich auch zu viel aufs Mal geändert um das Logging richtig zu beobachten.

  20. #20
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.514
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Lengen1971 Beitrag anzeigen
    ... versteh ich jetzt nicht, was du meinst.

    Bei mir werden die Cron-Jobs minütlich (spätestens, wenn jemand die Seite öffnet) ausgeführt und geloggt.
    Echt? Denn das wurde wirklich mal geändert das die minütlichen Cronjobs nur im Debug Mode geloggt werden.
    Grund war das verlinkte Ticket, die System Log bestand dann nur aus Cronjob Logs (im schlimmsten Fall 2880 Einträge pro Tag!)
    Es ging dabei um die Cron Start und Cron Ende Meldungen.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

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

    Standard

    Was hat
    PHP-Code:
    $GLOBALS['TL_CONFIG']['cron_limit'
    für einen Sinn? Die Variable existiert standardmäßig nicht und wird in System -> Einstellungen mit 0 angezeigt. Und laut Hilfetext heißt 0 - es werden keine Cronjobs ausgeführt.
    Ich habe das mal auf 30 gestellt. Trotzdem wird mein minütlicher Cronjob nicht ausgeführt.

    Und was hat es mit dem JavaScript in fe_page auf sich, siehe https://docs.contao.org/books/cookbo...in-Contao.html
    Das gibts bei mir nicht in fe_page.
    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

  22. #22
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.514
    User beschenken
    Wunschliste

    Standard

    Die Variable ist von der Erweiterung Cron und hat nichts mit dem Cron (Poor-Man-Cron) von Contao zu tun.

    Die soll helfen, dass die Cron Verarbeitung nicht zu lange dauert und den Aufbau der Seite stört, wenn mehrere Cron Jobs definiert sind.
    Das betrifft aber nur die Cronjobs in der Erweiterung Cron!

    Und was hat es mit dem JavaScript in fe_page auf sich, siehe https://docs.contao.org/books/cookbo...in-Contao.html
    Das gibts bei mir nicht in fe_page.
    Dann hast du entweder eine sehr alte Contao Installation oder eine neue mit eigener fe_page in der dieser Schnipsel fehlt oder anders aussieht.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

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

    Standard

    Die letzten Zeilen aus der Contao 3.5.6 fe_page:
    PHP-Code:
      <?= $this->mootools ?>

    </body>
    </html>
    Die letzten Zeilen aus meiner fe_page, wahrscheinlich noch aus 3.0.6:
    PHP-Code:
        <?php echo $this->mootools?>
        
        <?php if (!$this->disableCron): ?>
        <script>
            <?php if ($this->layout->addJQuery): ?>
            setTimeout(function(){jQuery.ajax("system/cron/cron.txt",{complete:function(e){var t=e.responseText||0;parseInt(t)<Math.round(+(new Date)/1e3)-<?php echo $this->cronTimeout?>&&jQuery.ajax("system/cron/cron.php")}})},5e3)
            <?php else: ?>
            setTimeout(function(){(new Request({url:"system/cron/cron.txt",onComplete:function(e){e||(e=0),parseInt(e)<Math.round(+(new Date)/1e3)-<?php echo $this->cronTimeout?>&&(new Request({url:"system/cron/cron.php"})).get()}})).get()},5e3)
            <?php endif; ?>
        </script>
        <?php endif; ?>

    <div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>

    </body>
    </html>
    Und der Quelltext meiner Seite:
    HTML-Code:
    <script>setTimeout(function(){var e=function(e,t){try{var n=new XMLHttpRequest}catch(r){return}n.open("GET",e,!0),n.onreadystatechange=function(){this.readyState==4&&this.status==200&&typeof t=="function"&&t(this.responseText)},n.send()},t="system/cron/cron.";e(t+"txt",function(n){parseInt(n||0)<Math.round(+(new Date)/1e3)-60&&e(t+"php")})},5e3)</script>
    [...]
    <script>setTimeout(function(){jQuery.ajax("system/cron/cron.txt",{complete:function(e){var t=e.responseText||0;parseInt(t)<Math.round(+(new Date)/1e3)-60&&jQuery.ajax("system/cron/cron.php")}})},5e3)</script>
    Da ist ganz unten zu sehen, das ich mich geirrt habe. Der JS-Code von cron ist drin. Gleich zweimal, einmal von mootools und einmal meiner. Ich glaube mich zu erinnern, das man das früher per Hand hinzufügen mußte. Oder ich habe was falsch verstanden.

    Nach der Korrektur warte ich aber trotzdem vergeblich auf Ausführung meines Skriptes. Selbst ein direkter Aufruf der cron.php bringt nichts.
    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

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

    Standard

    Im Debugmodus passierte jetzt was:
    Code:
    Running the hourly cron jobs
    Running the minutely cron jobs
    Das stand dann im Log.

    Jetzt weiß ich noch immer nicht, ob meine Funktion mit abgearbeitet wurde.
    Testweise hatte ich in initconfig.php auch mal reingeschrieben:
    PHP-Code:
    $GLOBALS['TL_CRON']['minutely'][] = array('Automator''purgeInternalCache'); 
    Auch kein Logeintrag.
    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)

Lesezeichen

Lesezeichen

Berechtigungen

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