Ergebnis 1 bis 14 von 14

Thema: Cron-Aufruf

  1. #1
    Contao-Nutzer
    Registriert seit
    12.07.2017.
    Beiträge
    5

    Standard Cron-Aufruf

    Hallo,

    ich bin ein Contao-Neuling und wurde mit der Aufgabe betraut, eine alte (2.10!) Contao-Seite auf den neuesten Stand (4.4) zu bringen. Das Upgrade hat soweit geklappt, einzig der Cron Job hinterlässt bei mir Fragezeichen. Sämtliche Dokumentationen/Tutorials beziehen sich auf die cron.php. In den alten Templates der Seite wurde der Inhalt der cron.txt geprüft und dann ggf. via AJAX-Request die cron.php aufgerufen.

    Feststellung #1: die cron.php gibt es nicht mehr, dafür jetzt die Route "_contao/cron"
    Feststellung #2 die cron.txt gibt es nicht mehr, dafür jetzt die DB-Tabelle tl_cron mit den entsprechenden Zeiteinträgen

    Was ist nun der vorgesehene Weg, um den (Poor-Man's) Cron aufzurufen (bevorzugt ohne serverseitigen Crontab-Eintrag)?

    So wie ich das sehe (im FrontendCron Controller), wird hier beim Aufruf geprüft wann der Cron das letzte Mal gelaufen ist (ehemals manuell geprüft via cron.txt). Bedeutet das, dass ich einfach bei jedem Request ohne Bedenken die Cron-Route via AJAX aufrufen kann/sollte, oder wie ist das gedacht?

    Besten Dank im Voraus.

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

    Standard

    Wenn du sowieso keinen Crontab Eintrag hast, brauchst du nichts weiter unternehmen. Der Cron wird bei einem Request am Schluss automatisch aufgerufen.

  3. #3
    Contao-Nutzer
    Registriert seit
    12.07.2017.
    Beiträge
    5

    Standard

    Hi Spooky, vielen Dank für die schnelle Antwort!

    Weshalb werden dann aber keine Timestamps in tl_cron gesetzt? Wenn ich z.B. den Wert für "lastrun" lösche und dann das Frontend aufrufe, wird der Wert nicht neu gesetzt. Erst nach einem manuellen Aufruf von "_contao/cron".

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

    Standard

    Evt. hast du den Command Scheduler in den System Einstellungen deaktiviert?

  5. #5
    Contao-Nutzer
    Registriert seit
    12.07.2017.
    Beiträge
    5

    Standard

    Nein, über den Hinweis unter der entsprechenden Checkbox bin ich erst auf die "_contao/cron"-Route aufmerksam geworden.

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

    Standard

    Dann keine Ahnung . Das sind die Bedingungen:
    PHP-Code:
    /**
     * Runs the command scheduler.
     *
     * @param PostResponseEvent $event
     */
    public function onKernelTerminate(PostResponseEvent $event)
    {
        if (!
    $this->framework->isInitialized() || !$this->canRunController($event->getRequest())) {
            return;
        }

        
    /** @var FrontendCron $controller */
        
    $controller $this->framework->createInstance(FrontendCron::class);
        
    $controller->run();
    }

    /**
     * Checks whether the controller can be run.
     *
     * @param Request $request
     *
     * @return bool
     */
    private function canRunController(Request $request)
    {
        
    /** @var Config $config */
        
    $config $this->framework->getAdapter(Config::class);

        return 
    $config->isComplete()
            && !
    $config->get('disableCron')
            && 
    in_array($request->attributes->get('_route'), ['contao_backend''contao_frontend'], true)
            && 
    $this->connection->isConnected()
            && 
    $this->connection->getSchemaManager()->tablesExist(['tl_cron'])
        ;


  7. #7
    Contao-Nutzer
    Registriert seit
    12.07.2017.
    Beiträge
    5

    Standard

    Hm, interessant. Beim einzelnen Prüfen der Bedingungen ergab sich folgendes:

    PHP-Code:
    $config->isComplete(); # true
    !$config->get('disableCron'); # true
    in_array($request->attributes->get('_route'), ['contao_backend''contao_frontend'], true); # false (!)
    $this->connection->isConnected(); # true
    $this->connection->getSchemaManager()->tablesExist(['tl_cron']); # true 
    Und dann...
    PHP-Code:
    $request->attributes->get('_route'); # null 
    Seltsam. Wenn das Attribut "_route" null ist, dann kann das natürlich nicht funktionieren.
    Aber wie kann das sein...?

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

    Standard

    Hm... kannst du das auch in einer frischen Contao 4.4.x Installation reproduzieren?

  9. #9
    Contao-Nutzer
    Registriert seit
    12.07.2017.
    Beiträge
    5

    Standard

    Jep! Frisch aufgesetztes Contao 4.4.

    /vendor/contao/core-bundle/src/EventListener/CommandSchedulerListener.php::canRunController():
    PHP-Code:
    var_dump($request->attributes->get('_route')); # null
    var_dump(in_array($request->attributes->get('_route'), ['contao_backend''contao_frontend'], true)); # false 

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

    Standard

    Kann ich ebenso bestätigen, schau ich mir gleich an.

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

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

    Standard

    Das Problem tritt nur auf der index Seite auf (und vielleicht auch nur wenn man prepend_locale auf false hat).

    // hm, oder doch nicht
    Geändert von Spooky (19.07.2017 um 07:18 Uhr)

  13. #13
    Contao-Fan Avatar von Stranger
    Registriert seit
    20.06.2009.
    Ort
    Blankenburg
    Beiträge
    746
    Partner-ID
    5635
    User beschenken
    Wunschliste

    Standard

    Wo kann man bei Contao 4.4 denn einstellen wie oft der Standard-Frontend "Cronjob" ausgeführt wird? Bzw. wie kann man erzwingen, dass er zum Test genau JETZT wieder ausgeführt wird? Muss man dafür etwas an der Datenbank verändern oder auf dem FTP-Server?
    Du willst dich bei mir bedanken?
    Ich freue mich über Geschenke von meiner Amazon-Wunschliste.

    Contao-Anwender seit 2008
    Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert

    Mein Unternehmen aus Blankenburg (Harz): Fast & Media

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

    Standard

    Zitat Zitat von Stranger Beitrag anzeigen
    Wo kann man bei Contao 4.4 denn einstellen wie oft der Standard-Frontend "Cronjob" ausgeführt wird? Bzw. wie kann man erzwingen, dass er zum Test genau JETZT wieder ausgeführt wird? Muss man dafür etwas an der Datenbank verändern oder auf dem FTP-Server?
    Grundsätzlich geht das nicht einfach so. Wenn du minutely, hourly, daily, weekly oder monthly nochmal ausführen lassen willst, obwohl noch nicht genug Zeit vergangen ist, dann musst du den entsprechenden Eintrag in der tl_cron Tabelle löschen/zurücksetzen und dann /_contao/cron aufrufen.

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
  •