Naplánované úlohy#
Všechno, co se v systému děje samo od sebe. Seznam se generuje z kódu, takže vyjmenovává přesně ty úlohy, které v repozitáři opravdu jsou.
Jak se úloha volá#
| Věc | Jak to funguje |
|---|---|
| Ověření | dotaz musí nést ?token= shodný s nastavením cronToken (skupina 1) |
| Odpověď | vždy JSON — {"status":"ok",…}, {"status":"error",…} nebo {"status":"skipped"} |
| Souběh | druhá instance téže úlohy skončí skipped, nečeká se |
Bez tokenu vrací 403 — a prázdný token nepustí NIKOHO
Kontrola porovnává očekávanou a poslanou hodnotu; když cronToken v nastavení
chybí, neprojde ani prázdný dotaz. Po nasazení na nový server je to první věc
k vyplnění, jinak neběží vůbec nic a nikde to nekřičí.
Zámek souběhu je fail-open
Dokud tabulka zámků neexistuje, skipped se nikdy nevrátí a úlohy se můžou
překrývat. Je to schválně — chybějící tabulka nemá zastavit provoz — ale
znamená to, že „nikdy jsem skipped neviděl“ není důkaz, že zámek funguje.
Jak poznat, že úloha běžela
Podle odpovědi, ne podle toho, že „nic nespadlo“. {"status":"ok"} vrací
i úloha, která neudělala nic — počty jsou v dalších klíčích odpovědi.
Nasazení#
Sloupec Doporučený interval je návrh ze zdrojového kódu — z něj se skládá crontab. Například:
*/1 * * * * curl -s "https://web.cz/cron/system/email-queue/send?token=TOKEN"
*/5 * * * * curl -s "https://web.cz/cron/store/reservation/expire?token=TOKEN"
15 3 * * * curl -s "https://web.cz/cron/blog/sitemap/article?token=TOKEN"
Nezapojená úloha NIKDY neběží — a nic se nerozbije
Nespuštěná úloha nevyhodí chybu. Jen se přestane dít to, co měla dělat: nevyprší košíky, nevygenerují se faktury, neuklidí se data. Odhalí se to obvykle až tím, že něco „nějak narostlo“. Proto po instalaci projděte celý seznam níž, ne jen to, co zrovna používáte.
Ne všechno je periodické
Několik úloh je opravných nebo jednorázových — mají v intervalu napsané „ručně“. Do crontabu nepatří; pustí se, když je potřeba.
Sitemap index až po ostatních sitemapách
Skládá rozcestník z už vygenerovaných souborů. Když poběží první, sestaví ho z toho, co zbylo po minulém běhu.
Přehled úloh#
Sdílené#
| Endpoint | Co dělá | Doporučený interval |
|---|---|---|
/cron/base/rating/recalc |
Self-heal přepočet agregátu rating threadů (Fáze 6) | periodicky, např. jednou denně (drift je výjimečný, ne hot-path) |
Inzerce#
| Endpoint | Co dělá | Doporučený interval |
|---|---|---|
/cron/bazaar/advert/notice-expiration |
Pošle BZ_ADVERT_EXPIRATION_NOTICE inzerátům, kterým do N dní vyprší expirace (N = setting 5/expirationNoticeDays) | denně (např. v noci) |
/cron/bazaar/advert/delete-expired |
Tiše označí deleted=1 inzeráty, jimž od expirace uplynulo víc než M dní (M = setting 5/expirationDeleteDays) | denně |
/cron/bazaar/advert/recount-prices |
Přepočítá denormalizovaný sloupec price u všech inzerátů z parametru price |
periodicky, např. každých 10–15 minut |
/cron/bazaar/category/recount |
Přepočítá denormalizovaný advert_count u všech kategorií | periodicky, např. každých 10–15 minut |
/cron/bazaar/elastic/reindex |
Full reindex inzerátů do nové verze indexů + atomický alias swap (bezvýpadkově, Redis lock proti souběhu) | 1× denně v noci |
/cron/bazaar/elastic/sync |
Inkrementální sync: doindexuje inzeráty vložené od watermarku (Redis es: |
každých 10 minut |
/cron/bazaar/sitemap/category |
Sitemapa všech aktivních kategorií Bazaaru s hreflang variantami | denně v noci |
/cron/bazaar/sitemap/advert |
Sitemapa aktivních inzerátů, automaticky rozdělená na soubory po 50k podle rozsahů ID | denně v noci |
/cron/bazaar/watchdog-email/send |
Mód 1 — okamžité posílání | průběžně, např. každých 5–10 minut |
/cron/bazaar/watchdog-email/digest |
Mód 2 — denní digest | jednou denně, např. ve 23:00 |
Blog#
| Endpoint | Co dělá | Doporučený interval |
|---|---|---|
/cron/blog/elastic/reindex |
Full reindex článků do nové verze indexů + atomický alias swap (bezvýpadkově, Redis lock proti souběhu) | 1× denně v noci |
/cron/blog/elastic/sync |
Inkrementální sync: doindexuje články změněné od watermarku (Redis es: |
každých 10 minut |
/cron/blog/sitemap/article |
— | denně v noci |
/cron/blog/sitemap/event |
— | denně v noci |
/cron/blog/sitemap/news |
— | denně v noci |
/cron/blog/sitemap/article-category |
— | denně v noci |
/cron/blog/sitemap/event-category |
— | denně v noci |
/cron/blog/sitemap/news-category |
— | denně v noci |
Katalog firem#
| Endpoint | Co dělá | Doporučený interval |
|---|---|---|
/cron/comcat/advert/notice-expiration |
Pošle CC_ADVERT_EXPIRATION_NOTICE inzerátům, kterým do N dní vyprší expirace (N = setting 5/expirationNoticeDays) | denně (např. v noci) |
/cron/comcat/advert/delete-expired |
Tiše označí deleted=1 inzeráty, jimž od expirace uplynulo víc než M dní (M = setting 5/expirationDeleteDays) | denně |
/cron/comcat/category/recount |
Přepočítá denormalizovaný advert_count u všech kategorií | periodicky, např. každých 10–15 minut |
/cron/comcat/elastic/reindex |
Full reindex firemních profilů (Comcat Advert) do nové verze indexů + atomický alias swap (bezvýpadkově, Redis lock proti souběhu) | 1× denně v noci |
/cron/comcat/elastic/sync |
Inkrementální sync: doindexuje inzeráty vložené od watermarku (Redis es: |
každých 10 minut |
/cron/comcat/sitemap/category |
Sitemapa všech aktivních kategorií Comcatu s hreflang variantami | denně v noci |
/cron/comcat/sitemap/advert |
Sitemapa aktivních inzerátů, automaticky rozdělená na soubory po 50k podle rozsahů ID | denně v noci |
/cron/comcat/watchdog-email/send |
Mód 1 — okamžité posílání | průběžně, např. každých 5–10 minut |
/cron/comcat/watchdog-email/digest |
Mód 2 — denní digest | jednou denně, např. ve 23:00 |
Diskuze#
| Endpoint | Co dělá | Doporučený interval |
|---|---|---|
/cron/discussion/elastic/reindex |
Full reindex kořenů vláken (level=1) do nové verze indexu + atomický alias swap | 1× denně v noci |
/cron/discussion/elastic/sync |
Inkrementální sync: doindexuje nová vlákna od watermarku (Redis es: |
každých 10 minut |
/cron/discussion/sitemap/message |
Sitemapa top-level (level=1) aktivních zpráv, automaticky rozdělená po 50k podle rozsahů ID | denně v noci |
/cron/discussion/sitemap/category |
Sitemapa všech kategorií Diskuze | denně v noci |
E-shop#
| Endpoint | Co dělá | Doporučený interval |
|---|---|---|
/cron/eshop/cart/cleanup |
Maže opuštěné košíky, kterým vypršela retenční lhůta | denně v noci |
/cron/eshop/complaint/expire |
Uzavírá reklamace, kterým vypršela lhůta na vyřízení | denně (lhůty se počítají ve dnech) |
/cron/eshop/elastic/reindex |
Full reindex prodejních karet do nové verze indexů + atomický alias swap (bezvýpadkově, Redis lock proti souběhu) | 1× denně v noci |
/cron/eshop/elastic/sync |
Inkrementální sync: doindexuje karty změněné od watermarku (Redis es: |
každých 10 minut |
/cron/eshop/feed/generate |
Generuje XML feedy pro srovnávače zboží | à hodinu (nebo dle požadavku srovnávače) |
/cron/eshop/order/expire |
Ruší nezaplacené objednávky a dogeneruje chybějící doklady | à hodinu |
/cron/eshop/order/invoice |
Ruší nezaplacené objednávky a dogeneruje chybějící doklady | à 15 minut |
/cron/eshop/price/recalc |
Aktivuje naplánované ceny a srovná denormalizovaný sloupec ceny | à 15 minut (aktivuje naplánované ceny — delší interval je oddálí) |
/cron/eshop/product-import/run |
Spustí nejstarší job ve frontě | každou minutu |
Fakturace#
| Endpoint | Co dělá | Doporučený interval |
|---|---|---|
/cron/invoicer/payment/generate |
Vystavuje doklady k zaplaceným platbám podle pravidel modulu | často (např. každých 15 min) — doklady vzniknou krátce po změně stavu platby, ale MIMO |
/cron/invoicer/schedule/generate |
Vystavuje opakované faktury podle rozvrhů, kterým nastalo datum | denně. Zpracuje max 7/scheduleBatchSize splatných rozvrhů (default 10); |
Sklad#
| Endpoint | Co dělá | Doporučený interval |
|---|---|---|
/cron/store/batch/expiry-alert |
Upozorňuje na šarže, kterým se blíží expirace | denně ráno |
/cron/store/reservation/expire |
Uvolňuje skladové rezervace, kterým vypršela platnost | à 5 minut |
/cron/store/stock/recount |
Noční přepočet skladu — srovná rezervovaná množství, šarže a ceny karet | denně v noci |
Systém#
| Endpoint | Co dělá | Doporučený interval |
|---|---|---|
/cron/system/asset-thumbnail-catchup/generate |
Doplní image varianty (poster z prvního framu) pro video Assety, kterým varianty zatím nebyly fyzicky vygenerovány — typicky když v době uploadu ffmpeg chyběl nebo selhal | denně v noci |
/cron/system/asset-thumbnail-catchup/backfill-meta |
Doplní Asset.meta (reálné rozměry variant) assetům, kterým chybí (meta IS NULL) — tj | jednorázově po nasazení, pak už netřeba |
/cron/system/auth-log/purge-old |
Periodický cleanup persistentního audit logu (cms_system_auth_log) | denně — |
/cron/system/elastic/status |
Health ES clusteru + počty dokumentů per index — monitoring / smoke check | ručně (kontrola stavu) |
/cron/system/elastic/watch |
Hlídá dostupnost vyhledávání a hlásí problémy e-mailem | à 15 minut |
/cron/system/email-queue/send |
Postupné odeslání emailů z fronty | à minutu |
/cron/system/file-system/sanitize |
Cron pro sanitizaci názvů souborů/složek v uploads adresáři — projde celý strom a přejmenuje položky s nevyhovujícím názvem (diakritika, mezery, nepovolené znaky) na bezpečný tvar | ručně, po hromadném nahrání souborů (není periodická) |
/cron/system/jwt-deny-list/cleanup-expired |
Cleanup expirovaných řádků z cms_system_jwt_denylist (DB-backed JtiDenyList) | denně v noci (při useRedis: true je to no-op) |
/cron/system/page-tree/rebuild |
Regeneruje nested-set indexy (lft, rgt, level) stromu stránek v cms_system_pages z adjacency (parent_id) | ručně, po hromadné změně stromu stránek (není periodická) |
/cron/system/rate-limit/purge-old |
Cleanup expirovaných řádků z cms_system_rate_limit (DB-backed RateLimit) | denně v noci (při useRedis: true je to no-op) |
/cron/system/sitemap/generate |
Vygeneruje XML sitemapu pro System stránky se všemi jazykovými variantami (hreflang) | denně v noci |
/cron/system/sitemap/index |
Vygeneruje sitemap index (rozcestník) odkazující na všechny vygenerované sitemap- .xml soubory v adresáři |
denně v noci, AŽ PO ostatních sitemapách |
/cron/system/user-refresh-token/purge-old |
Periodický cleanup expirovaných refresh tokenů (cms_system_user_refresh_tokens) | denně |