Laravel Version: 5.1.45 (LTS)
PHP Version: 5.6.1
Ich versuche, alle 1 Minute einen Befehl auszuführen, indem ich Laravel Aufgabenplanung verwende.
>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();
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!
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:
In diesem Fall müssen Sie nicht. Es wird im ursprünglichen Framework-Code getestet.
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.
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.