getCleanupInterval(); $schedule->command('cleanup:orphaned-videos --force') ->cron("*/{$interval} * * * *") ->withoutOverlapping() ->runInBackground(); // Evict NAS stream-cache files older than 24 hours $schedule->call(function () { $nas = app(\App\Services\NasSyncService::class); if ($nas->isEnabled()) { $nas->clearNasCache(24); } })->daily()->name('nas-cache-evict'); // Clean up stale temp files in public/tmp older than 1 hour $schedule->call(function () { $tmpDir = storage_path('app/public/tmp'); if (! is_dir($tmpDir)) return; $cutoff = time() - 3600; foreach (glob("{$tmpDir}/*") as $file) { if (is_file($file) && filemtime($file) < $cutoff) @unlink($file); } })->hourly()->name('tmp-cleanup'); // Auto-sync local files to NAS when NAS comes back online. // Runs every 10 minutes; exits immediately when NAS is unreachable. $schedule->command('nas:auto-sync') ->everyTenMinutes() ->withoutOverlapping() ->runInBackground(); // Weekly activity digest — every Monday at 9:00 AM (Bahrain time) $schedule->command('digest:weekly') ->weeklyOn(1, '09:00') ->withoutOverlapping() ->runInBackground(); } /** * Register the commands for the application. */ protected function commands(): void { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } /** * Get the interval in minutes for cleanup (from .env) */ protected function getCleanupInterval(): int { return (int) env('CLEANUP_INTERVAL_MINUTES', 30); } }