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'));