Planification
La vérification et le nettoyage manuels conviennent au développement, mais les systèmes en production nécessitent de l'automatisation. Le planificateur de tâches de Laravel vous permet d'exécuter audit:verify et audit:prune de manière récurrente — aucune entrée cron personnalisée n'est nécessaire au-delà du planificateur standard de Laravel.
Configuration recommandée
Ajoutez les deux commandes dans routes/console.php (style Laravel 11+) :
use Illuminate\Support\Facades\Schedule; Schedule::command('audit:verify --notify')->hourly(); Schedule::command('audit:prune')->daily();
Cela vous donne :
- Vérification horaire — détecte les falsifications en moins de 60 minutes et envoie des notifications via vos canaux configurés
- Nettoyage quotidien — supprime les journaux d'audit plus anciens que votre période de rétention configurée (par défaut : 90 jours)
Entrée cron du serveur
Le planificateur de Laravel nécessite une seule entrée cron sur votre serveur. Si vous ne l'avez pas encore configurée :
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
Cela exécute le planificateur Laravel chaque minute. Le planificateur lui-même détermine quelles commandes sont dues.
Planifications personnalisées
Fréquence de vérification
La bonne fréquence de vérification dépend de l'importance de la détection de falsification pour votre cas d'utilisation :
// Haute sécurité -- vérification toutes les 15 minutes Schedule::command('audit:verify --notify')->everyFifteenMinutes(); // Standard -- vérification toutes les heures Schedule::command('audit:verify --notify')->hourly(); // Priorité basse -- vérification une fois par jour Schedule::command('audit:verify --notify')->daily();
Rétention différente selon les models
Planifiez plusieurs commandes de nettoyage avec des périodes de rétention différentes :
// Conserver les journaux financiers pendant 7 ans Schedule::command('audit:prune --days=2555 --type="App\Models\Transaction"')->daily(); // Conserver les journaux d'activité générale pendant 90 jours Schedule::command('audit:prune --days=90 --type="App\Models\Post"')->daily(); // Nettoyer tout le reste selon la rétention par défaut Schedule::command('audit:prune')->daily();
Planification horaire
Exécutez les opérations lourdes en dehors des heures de pointe :
Schedule::command('audit:verify --notify')->hourly(); Schedule::command('audit:prune')->dailyAt('03:00');
Planification spécifique à l'environnement
Utilisez environments() pour restreindre la planification à des environnements spécifiques :
Schedule::command('audit:verify --notify') ->hourly() ->environments(['production', 'staging']); Schedule::command('audit:prune') ->daily() ->environments(['production']);
Prévention des chevauchements
Pour les grandes tables d'audit, la vérification peut prendre du temps. Empêchez les exécutions simultanées avec withoutOverlapping() :
Schedule::command('audit:verify --notify') ->hourly() ->withoutOverlapping(); Schedule::command('audit:prune') ->daily() ->withoutOverlapping();
Journalisation des sorties
Capturez la sortie des commandes pour le débogage :
Schedule::command('audit:verify --notify') ->hourly() ->appendOutputTo(storage_path('logs/audit-verify.log')); Schedule::command('audit:prune') ->daily() ->appendOutputTo(storage_path('logs/audit-prune.log'));
Exemple complet
Un fichier routes/console.php prêt pour la production combinant toutes les recommandations :
use Illuminate\Support\Facades\Schedule; Schedule::command('audit:verify --notify') ->hourly() ->withoutOverlapping() ->environments(['production']) ->appendOutputTo(storage_path('logs/audit-verify.log')); Schedule::command('audit:prune') ->dailyAt('03:00') ->withoutOverlapping() ->environments(['production']) ->appendOutputTo(storage_path('logs/audit-prune.log'));