Nouveau dans Laravel 13.35. php artisan schedule:interrupt demande aux tâches planifiées de s'arrêter, par exemple avant un déploiement. Mais une commande déjà lancée, surtout en arrière-plan (runInBackground()), ne l'entendait pas : elle allait au bout, ou se faisait tuer au milieu d'un lot.
Depuis Laravel 13.35
L'interruption est maintenant datée, et Schedule::hasBeenInterruptedSince() dit si elle a eu lieu depuis un moment donné. Une commande longue la consulte à un endroit où s'arrêter ne casse rien :
use Illuminate\Console\Scheduling\Schedule; public function handle(Schedule $schedule) { $debut = now(); foreach ($this->lots() as $lot) { if ($schedule->hasBeenInterruptedSince($debut)) { return; } $this->traiter($lot); } }
Comparer à l'heure de départ, et non à « une interruption existe », compte : le signal d'un déploiement de la veille reste en cache, et ne doit pas bloquer les passages suivants.
À faire
La commande relances:envoyer relance chaque nuit les factures impayées, par lots de dix. Un lot commencé doit aller à son terme : arrêté au milieu, il relancerait certains clients deux fois.
Faites-la s'arrêter entre deux lots quand schedule:interrupt a été lancée depuis son départ. Les factures restantes partiront au prochain passage.