useCache('file'); // MaxMind publishes GeoLite2 on Tuesdays, so Wednesday always has it $schedule->command('geoip:update') ->weeklyOn(3, '04:30') ->withoutOverlapping() ->runInBackground(); /* * Os robos que o cron chamava por curl. Uma linha de crontab passa a * dar conta de todos: * * * * * * * cd /caminho/do/painel && php artisan schedule:run >> /dev/null 2>&1 * * withoutOverlapping evita a pilha de voltas quando uma passa do * minuto, e a saida de cada robo fica no proprio arquivo, sobrescrita * a cada volta, para o log nao crescer sem fim. */ /* * As portas ativas divididas em fatias. O tamanho de cada fatia sai * da contagem no banco, entao crescer de 2 mil para 5 mil portas so * pede mais partes aqui, nunca uma linha nova de crontab. */ foreach (range(1, self::PARTES) as $parte) { $this->robot($schedule, 'statistics', $parte); } } /** Um robo por minuto, sem sobreposicao e com a saida em arquivo. */ private function robot(Schedule $schedule, string $nome, ?int $parte = null): void { $comando = 'robot:run ' . $nome; $rotulo = $nome; if ($parte !== null) { $comando .= ' --parte=' . $parte . ' --de=' . self::PARTES; $rotulo .= '-' . $parte; } $schedule->command($comando) ->everyMinute() ->withoutOverlapping(10) ->runInBackground() ->sendOutputTo(storage_path('logs/robot-' . $rotulo . '.log')); } /** * Register the commands for the application. * * @return void */ protected function commands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }