Konfigurieren und testen Sie Laravel Task Scheduling

8

Umgebung

  • Laravel Version: 5.1.45 (LTS)

  • PHP Version: 5.6.1

Beschreibung

Ich versuche, alle 1 Minute einen Befehl auszuführen, indem ich Laravel Aufgabenplanung verwende.

>

Versuch

Ich habe diese Zeile zu meiner Cron Tab-Datei hinzugefügt

* * * * * php artisan schedule:run >> /dev/null 2>&1

Hier ist meine /app/Console/Kernel.php

%Vor%

Ich habe diese Zeile $schedule->command('echo "Happy New Year!" ')->everyMinute();

hinzugefügt

Frage

Wie teste ich das?

Wie trigge ich mein Echo zur Anzeige?

Woher weiß ich, ob das, was ich getan habe, nicht falsch ist?

Ich öffne mich in diesem Moment für irgendwelche Vorschläge.

Irgendwelche Hinweise / Vorschläge / Hilfe dazu werden sehr geschätzt!

    
ihue 20.10.2016, 18:16
quelle

3 Antworten

6

command() führt einen Handwerkerbefehl aus. Was Sie erreichen wollen - die Ausgabe eines Befehls an das Betriebssystem - erfolgt über exec('echo "Happy New Year!"')

Das Testen hängt davon ab, was Sie testen möchten:

  • Ob der Scheduler (jede Minute) arbeitet?

In diesem Fall müssen Sie nicht. Es wird im ursprünglichen Framework-Code getestet.

  • Ob der Befehl erfolgreich ist?

Nun können Sie php artisan schedule:run manuell ausführen und die Ausgabe sehen.

Der Scheduler erzeugt keine Ausgabe als Standard ( >> /dev/null 2>&1 ). Sie können jedoch die Ausgabe der ausgeführten Skripts in eine beliebige Datei umleiten, indem Sie writeOutputTo() oder appendOutputTo() ( Ссылка) verketten ).

Für komplexere Logik schreiben Sie stattdessen einen Konsolenbefehl ( Ссылка ) und verwenden Sie command() - Auf diese Weise können Sie schönen, testbaren Code schreiben.

    
nXu 20.10.2016, 19:01
quelle
2

Wenn Sie die Terminierung von Ereignissen testen möchten, können Sie dieses Beispiel verwenden. Es basiert auf dem Standardbefehl inspire:

%Vor%     
Michiel 22.08.2017 09:26
quelle
0

Aufbauend auf Michiels Antwort habe ich die in Illuminate\Console\Scheduling\Event enthaltenen Methoden verwendet, um zu testen, ob das Ereignis für ein bestimmtes Datum ausgeführt werden soll.

Ich habe das aktuelle Datum mit Carbon::setTestNow() verspottet, so dass jede datumsbasierte Logik in den Filtern when() und skip() sich wie erwartet verhält.

%Vor%     
Adam Moore 01.03.2018 13:55
quelle

Tags und Links