Skip to content

Cron skripty

Automatické úlohy spouštěné v definovaném časovém intervalu. Jednotlivé cron skripty jsou uloženy v adresáři app/cron.

Volání

Volání skriptu je možné z internetu pomocí URL routy CRON/{script}. Tyto URL jsou chráněny omezením přístupu dle IP adres.

Povolené IP adresy jsou definovány v .env:

ALLOWED_IP=127.0.0.1,::1,93.185.102.4,93.185.102.5

Příklad

Zavolání cron skriptu app/cron/purge-sessions.php:

http://localhost:8000/CRON/purge-sessions

Nebo přes command line:

./console sessions:purge

Bezpečnost

Spouštění je omezeno na: - Vlastní server (127.0.0.1, ::1) - Mediasolution servery - Pevné IP adresy programátorů (definované v .env)

To zajišťuje, že cron skripty mohou být spuštěny pouze z důvěryhodných míst.

Struktura cron skriptů

Cron skripty jsou jednoduché PHP soubory v adresáři app/cron/:

<?php

declare(strict_types=1);

// Zde je logika cron skriptu
// Např. vymazání starých sessions, generování sitemapu, atd.

// Není třeba žádného výstupu, ale lze jej zapsat do logu

Integrace s CLI

Z CLI (Local) lze volat cron skripty přes console příkazy:

./console sessions:purge

Příslušný command soubor zavolá cron skript:

<?php

// @description Purge sessions

declare(strict_types=1);

require DIR . '/app/cron/purge-sessions.php';

Běžné cron úlohy

  • delete-cache - Kompletní smazání mezipaměti
  • indexing - Indexování webu pro vyhledávání
  • purge-cache - Vymazání staré mezipaměti
  • purge-sessions - Vymazání starých sessions
  • sitemap - Generování sitemap

Nastavení v systému

Pro pravidelné spouštění je nutné nastavit cron job na serveru:

# Každých 5 minut
*/5 * * * * curl -s http://localhost:8000/CRON/purge-sessions

# Každou noc v 2 hodiny
0 2 * * * curl -s http://localhost:8000/CRON/sitemap

Nebo přes PHP-CLI:

# Každých 5 minut
*/5 * * * * /usr/bin/php /path/to/console sessions:purge

Monitoring

Lze přidat logování pro sledování spuštění cron skriptů:

<?php

declare(strict_types=1);

$start = time();

// ... logika ...

$duration = time() - $start;
Debugger::log("Cron script completed in {$duration} seconds");