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#
| 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: |
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: |
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: |
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: |
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: |
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ě |