Nel tutorial dedicato a laravel 5 di oggi vediamo come programmare cron jobs e azioni a una determinata ora del giorno all’interno di laravel.
Panoramica
NOTA: Questo tutorial si basa sulla versione 5.2 di Laravel. La funzione di Scheduling non è presente in versioni inferiori di Laravel (ad esempio non è presente con laravel 4).
All’interno delle nuove release di Laravel è presente una nuova funzionalità di scheduling che permette – di fatto – di usare il cron jobs in modo piu intelligente e utilizzabile direttamente all’interno delle nostre applicazioni in modo nativo.
Poniamo un esempio esplicativo. Senza questa feature per schedulare un’azione all’interno della nostra app dovremmo entra in cron sul server e settare al suo interno eventuali comandi linux. Il problema nasce quando sono da modificare. In questo caso di fatto dovremmo ri-accedere al server e variare. Laravel ci viene incontro in quanto permette di configurare UN SOLO cron jobs alla cadenza che desideriamo (suggerisco 1 ogni minuto) e ogni volta il cron viene elaborato il nostro artisan di laravel esegue automaticamente uno o più task impostati direttamente all’interno dell’app.
Ma non solo: è possibile variare direttamente dentro di laravel una cadenza oraria (come ad esempio “esegui 1 volta al giorno alle ore xx:yy”). O addirittura funzionalità particolarmente utili come esegui solo nel week end etc.
Vediamo come realizzarlo in termini pratici.
Realizzazione
NOTA: Laravel ha già al suo interno un comodo esempio che potete de-commentare e usare per capire meglio le funzionalità dello scheduling ( di fatto l’esempio base stampa in console un aforisma). In questo esempio invece eseguiremo un’azione a ogni task e stamperemo in console “Azione eseguita”.
Aprimo per prima cosa il file Kernel.php che è il nostro “smistatore” con al suo interno tutti i task da eseguire a ogni avvio di cron.
<?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 = [ Commands\TestCron::class, ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->command('testcron')->dailyAt('08:30'); } }
In questo esempio ho creato una classe ( e task) chiamato “TestCron” e lo avvio giornalmente alle 8.30
A questo punto creiamo il file TestCron.php all’iterno della cartella App\Console\Commands e incolliamo quanto segue:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; class Rigenera extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'testcron'; // Nota deve essere uguale al command impostato sul Kernel /** * The console command description. * * @var string */ protected $description = 'TestCron'; /** * Execute the console command. * * @return mixed */ public function handle() { //Azione da eseguire qui ad esempio update database etc //success stampato in console $this->info("Azione eseguita"); } }
A questo punto ci basta andare sul server alla sezione cron jobs e impostare:
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
Ricordatevi di sostituire il path che punti al vostro file artisan. Su certi hosting ricordatevi di recuperare il percorso compresivo (ovviamente) di public_html etc nella maggior parte dei casi dovreste usare una path simile a questa – giusto per fare un esempio:
/home/accountsulserver/public_html/artisan
Piccolo tips: Se accedete da ssh da terminale e fate andare il comando: php artisan schedule:run equivale a forzare l’esecuzione dei command. Nel caso d’esempio dovreste vedere in risposta sul terminale l’informazione “Azione eseguita” 😉
E’ tutto, godetevi i vostri cron gestibili dentro laravel 5 ! 😉
Questo articolo ti è stato utile? Condividilo!