Skip to content
V
For developers
Architecture, conventions, the core and security
Getting started / Scheduled jobs

Scheduled jobs#

Everything the system does on its own. The list is generated from the code, so it names exactly the jobs the repository really contains.

How a job is called#

GET /cron/<module>/<presenter>/<action>?token=<cronToken>
Thing How it works
Authorisation the request must carry a ?token= matching the cronToken setting (group 1)
Response always JSON — {"status":"ok",…}, {"status":"error",…} or {"status":"skipped"}
Concurrency a second instance of the same job ends as skipped, it does not wait

Without a token it returns 403 — and an empty token lets NOBODY in

The check compares the expected and the supplied value; when cronToken is missing from the settings, not even an empty request gets through. On a fresh server it is the first thing to fill in — otherwise nothing runs at all and nothing anywhere complains.

The concurrency lock is fail-open

Until the lock table exists, skipped is never returned and jobs may overlap. That is deliberate — a missing table must not stop operations — but it means "I have never seen skipped" is no proof that the lock works.

How to tell a job actually ran

By its response, not by the fact that "nothing crashed". {"status":"ok"} is also returned by a job that did nothing at all — the counts are in the other keys of the response.

Deployment#

The Suggested interval column is the recommendation from the source code — build your crontab from it. For example:

*/1  * * * *  curl -s "https://site.com/cron/system/email-queue/send?token=TOKEN"
*/5  * * * *  curl -s "https://site.com/cron/store/reservation/expire?token=TOKEN"
15   3 * * *  curl -s "https://site.com/cron/blog/sitemap/article?token=TOKEN"

An unscheduled job NEVER runs — and nothing breaks

It raises no error. It merely stops doing what it was meant to: carts do not expire, invoices are not generated, data is not cleaned up. It usually surfaces only when something "has somehow grown". So walk the whole list below after an installation, not just the parts you happen to use.

Not everything is periodic

A few jobs are repair or one-off tasks — their interval says "by hand". They do not belong in the crontab; run them when needed.

The sitemap index goes last, after the other sitemaps

It assembles a directory of already generated files. Run first, it builds one from whatever the previous run left behind.

The jobs#

Shared#

Endpoint What it does Suggested 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)

Classifieds#

Endpoint What it does Suggested 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::watermark:bazaar_advert, 5 min překryv) + orphan cleanup (dokumenty bez DB řádku) 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 What it does Suggested 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::watermark:blog_article, 5 min překryv) + orphan cleanup (dokumenty bez DB řádku) 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

Company catalogue#

Endpoint What it does Suggested 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::watermark:comcat_advert, 5 min překryv) + orphan cleanup (dokumenty bez DB řádku) 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

Discussion#

Endpoint What it does Suggested 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::watermark:discussion_message, 5 min překryv) + orphan cleanup 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 What it does Suggested 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::watermark:eshop_product_set, 5 min překryv) + orphan cleanup (dokumenty bez DB řádku) 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

Invoicing#

Endpoint What it does Suggested 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);

Warehouse#

Endpoint What it does Suggested 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

System#

Endpoint What it does Suggested 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ě