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!





