CakePHP 2.X Cron-Jobs funktionieren nicht

8

EDITS FÜR 2017 IN BOTTOM SECTION

Ich habe die folgenden doc-Einträge gelesen:

Ссылка

Ссылка

Sowie diese Frage:

Erstellen von Cron-Jobs in CakePHP 2.x

>

Ich habe Probleme, zwei Cron-Job-Funktionen zu implementieren. Eine davon ist die gleiche wie die oben aufgeführte Frage zum Stack-Overflow, um eine Test-E-Mail zu senden. Der andere, um einfach eine neue Zeile in meine "Crons" -Tabelle einzufügen. Keine funktioniert und ich glaube, es ist die Art, in der ich versuche, die Cron-Jobs zu nennen. Ich glaube nicht, dass ich den richtigen Pfad verwende.

Konsole / Befehl / CronShell.php

%Vor%

Ich habe eine CronsController.php mit dem obigen Code als Teil der Indexaktion eingerichtet. Der Code funktioniert einwandfrei, wenn über den Controller zugegriffen wird, so dass das Problem mit dem Shell- oder Cron-Job auftritt.

Ich habe die folgenden Befehle verwendet, um diese Methode als Cron-Job zu bezeichnen, aber keiner hat funktioniert ...

%Vor%

Ähnlich habe ich die folgende Shell versucht, eine Test-E-Mail zu senden

Konsole / Befehl / EmailShell.php

%Vor%

Wieder probiere ich die folgenden Befehle aus. Für jeden dieser Befehle habe ich auch versucht, den Methodennamen "main" gemäß den Anweisungen des Dokuments zu entfernen.

%Vor%

2017 BEARBEITEN - NOCH NICHT FUNKTIONIEREN

Ich habe meinen Cron auf /home/allfan5/public_html/allfans/app/Console/cake.php -app /home/allfan5/public_html/allfans/app/ test action

aktualisiert

Ich habe eine Shell namens TestShell und eine Funktion namens "action". Die Action-Funktion ist komplett leer, um Dinge zu testen (Ich habe auch eine Funktion versucht, bei der ich Benutzer per E-Mail schickte, aber ich bekam Fehler, also erstellte ich eine neue Shell und eine komplett leere Funktion und ich erhalte denselben Fehler).

Der Fehler, den ich jetzt erhalte, ist

%Vor%

Ich habe keine Ahnung, was das verursachen könnte, da die Shell-Funktion komplett leer ist. Sogar die Aktion, als ich versuchte, Benutzer per E-Mail zu versenden, kopierte ich den Code und lief es von einem Controller und es funktionierte gut. Es stimmt also etwas nicht damit, wie Cake die Shell ausführt oder aufruft.

Ich betreibe Kuchen 2.5 auf PHP 5.4

    
bowlerae 18.04.2014, 13:58
quelle

4 Antworten

2

Wir benutzen eine andere Art, crons zu betreiben:

im Webroot dir Ich habe eine Datei namens corn_dispatcher.php, die eine Kopie der Datei index.php ist, aber mit einigen Änderungen am Ende der Datei:

App :: verwendet ('Dispatcher', 'Routing');
definieren ('CRON_DISPATCHER', wahr);
$ Dispatcher = neuer Dispatcher ();
$ Dispatcher- & gt; Versand (neuer CakeRequest ($ argv [1]), neuer CakeResponse ());

Dann habe ich eine CronjobController.php Datei mit den Funktionen, die sich auf einzelne Crons beziehen. Außerdem wurde eine beforeFilter-Funktion mit $ this- & gt; Auth- & gt; allow (); (also Crons laufen, ohne wegen ACL-Einschränkungen zu brechen) sowie das Entfernen von Layouts und Autorendering

Als Nächstes legen Sie Routen zu den Crons fest.

Schließlich in meiner Crontabs-Datei:

1 6 * * * php -f /pfad-zu-webroot/cron_dispatcher.php / routeUrl

Auch einige Dinge zu beachten:

  • Sie müssen möglicherweise den PHP-Pfad den vollständigen Pfad nicht ausführen, wie ich es oben habe.
  • Wenn Dateien erstellt werden, müssen Sie möglicherweise die crontab als Benutzer www-data oder gleichwertig auf Ihrer Distribution von linux
  • ausführen
  • Auch wenn Sie eine Menge Sachen in der Funktion vorFilter von AppController.php haben, müssen Sie möglicherweise eine Bedingung stellen, um zu sehen, ob der Wert von HTTP_HOST leer ist, damit Sie die Ausführung von crons so leicht wie möglich halten

Ich hoffe, das hilft.

    
SidMalde 28.04.2014 14:00
quelle
2

Diese Methode ist die "Vanille" -Methode, erfordert nicht, dass Sie irgendwelche PHP-Dateien bearbeiten oder hinzufügen, um Ihre Cron-Jobs zu versenden, es funktioniert mit CakePHP 2.x

So für CakePHP 2.x verwenden Sie das:

Einstellungen:

  • Sie haben eine Shell namens CustomShell.php, die sich unter /public_html/app/Console/Command/CustomShell.php

  • befindet
  • Innerhalb dieser CustomShell.php haben Sie mehrere Funktionen: functionThis() und functionThat()

Wie ruft man diese Shell auf und wie ruft man jede Funktion an?

Sie gehen zu Ihrem cPanel (oder dem von Ihnen verwendeten Management) innerhalb des Cron Job Managers, und Sie geben Folgendes in den Befehl ein:

  • Die Syntax sieht folgendermaßen aus:

    cd /home/your_user/public_html/app && Console/cake shell_name function_name

  • So sieht das cmd bei meinem Beispiel aus:

    cd /home/your_user/public_html/app && Console/cake custom functionThis

Beachten Sie, dass der Funktionsname nicht CustomShell , sondern custom lautet. Beachten Sie auch, wie ich das functionThis() aufrufen kann. Sie können dieses Feld leer lassen und es ruft automatisch Ihre main() -Funktion in der CustomShell.php -Datei auf.

    
nullwriter 02.03.2015 15:51
quelle
2
  

Ich betreibe Kuchen 2.5 auf PHP 5.4

Sie laufen vielleicht PHP 5.4, aber Ihr php-cli vielleicht in anderer Version könnte zum Beispiel php sein 7 überprüfen Sie Ihre CLI-Version. In PHP 7 können Sie keine Klasse mit dem Namen String erstellen.

%Vor%     
vasillis 21.10.2017 13:30
quelle
1

Verwenden Sie den vollständigen Pfad für das Cake Shell-Skript (anstatt cd zu verwenden) und übergeben Sie dann den vollständigen Pfad Ihres App-Verzeichnisses gemäß den Anweisungen in der Konsole:

  

Ihr Arbeitspfad sollte mit Ihrem Anwendungspfad identisch sein   ändere deinen Pfad mit dem Parameter '-app'. Beispiel: -app   relativ / pfad / zu / myapp oder -app / absolut / pfad / zu / myapp

So wird Ihre Cron-Registerkarte:

%Vor%     
robmcvey 28.04.2014 14:52
quelle

Tags und Links