Configure and test Laravel Task Scheduling
laravel, laravel-5, php
Solution
`command()` runs an artisan command. What you're trying to achieve - issuing a command to the OS - is done by `exec('echo "Happy New Year!"')`
Testing depends on what you want to test:
- Whether the scheduler (every minute) is working?
In this case, you don't have to. It is tested in the original framework code.
- Whether the command succeeds?
Well, you can manually run `php artisan schedule:run` and see the output.
The scheduler does not produce any output on default (`>> /dev/null 2>&1`). You can, however, redirect the output of the runned scripts to any file by chaining `writeOutputTo()` or `appendOutputTo()` (https://laravel.com/docs/5.1/scheduling#task-output).
For more complex logic, write a console command instead (https://laravel.com/docs/5.1/artisan#writing-commands) and use `command()` - this way you can write nice, testable code.
Problem
Environment Laravel Version : 5.1.45 (LTS) PHP Version : 5.6.1 Description I'm trying to run a command every 1 minute using Laravel Task Scheduling. Attempt I've added this line to my cron tab file `* * * * * php artisan schedule:run >> /dev/null 2>&1` Here is my /app/Console/Kernel.php ``` <?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ \App\Console\Commands\Inspire::class, ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->command('inspire')->hourly(); $schedule->command('echo "Happy New Year!" ')->everyMinute(); //<---- ADD HERE } } ``` I've added this line `$schedule->command('echo "Happy New Year!" ')->everyMinute();` Question How do I test this ? How do I trigger my echo to display ? How do I know if what I did is not wrong ?