Crony v5.19

Crony jsou naplánované úlohy, které v TAS zajišťují běh workflow v čase (spouštění naplánovaných procesů, aktivace časovaných úkolů), rozesílku notifikací, údržbu dat a integrace s okolními systémy. Tento článek popisuje, jak crony ve verzi TAS 5.19 fungují, kde se spravují a jak se konfigurují, a obsahuje kompletní přehled všech 28 platformních cronů včetně doporučení, které z nich mít na instanci aktivní.

Po čerstvé instalaci TAS 5.19 neběží žádný cron. Devět cronů má seed migrací založený záznam, ale všechny neaktivní; zbylých devatenáct nemá po instalaci ani záznam. Minimální sadu, kterou je potřeba aktivovat, najdete v kapitole 3.1 Nutné minimum.

Pluginy ve verzi 5.19 nedodávají žádný cron. Mechanismus pro plugin crony je v aplikaci plně zapojený (takový cron by se v seznamu zobrazil s typem PLUGIN místo PLATFORM), ale žádný z dodávaných pluginů v 5.19 svůj cron neregistruje. Seznam Administrace → Crony proto obsahuje výhradně těchto 28 platformních cronů.

Související článek: Stav systému – Monitor cronů

1. Jak crony v TAS fungují

1.1 Kde je v administraci najdete

Obrazovka

Cesta

K čemu slouží

Crony

/administration/crons

Seznam nakonfigurovaných cronů, zakládání, editace, mazání, ruční spuštění, tovární nastavení.

Monitor cronů

/administration/system-health/crons

Živý přehled naplánovaných úloh, jejich posledních běhů a stavu.

Stav systému → Přehled

/administration/system-health/overview

Souhrnný stav naplánovaných úloh jako jedna z komponent celkového zdraví instance.

1.2 Architektura

  • Crony neběží ve web-backendu, ale v samostatném procesu cron worker. Cron workerů může běžet víc současně – ve Stavu systému je poznáte podle typu backendu Cron.
  • Každý cron je třída se čtyřmi povinnými poli:
    • schedule – výchozí cron výraz,
    • alias – výchozí zobrazovaný název,
    • description – výchozí popis,
    • defaultStatusA / N (viz 1.4),
    • volitelně parametersSchema – JSON schéma, ze kterého administrace generuje formulář parametrů.
  • Registr platformních cronů obsahuje ve verzi 5.19 přesně 28 položek. Plugin crony by se do stejného registru přimíchaly z nainstalovaných pluginů.
  • Historie běhů se ukládá do Elasticsearch (index z TAS_ELASTIC_CRON_RUN_INDEX_NAME, ve výchozím stavu hlavní index s příponou -cron-runs). Zápis historie je jen observabilita, ne funkční stav – výpadek Elasticsearch nezastaví vykonávání cronů, jen se neuloží záznam o běhu. Autoritativní záznam o posledním běhu je krátký otisk v Redisu.
  • Heartbeat monitor detekuje zaseknutý nebo spadlý běh: worker pravidelně hlásí, že cron žije, a po vypršení timeoutu se běh označí jako Zabitý (Process crashed (stale heartbeat).). Časování se řídí env proměnnými v kapitole 1.7.
  • Souběh na víc workerech hlídá distribuovaný zámek v Redisu.
  • Ke každému běhu se zaznamenává stav (R běžící, F dokončený, E chyba, K zabitý) a spouštěč (SCHEDULED / MANUAL).
Databázová tabulka CRON_RUNS od verze 5.19 neexistuje – migrace „cron overhaul“ ji zahodila spolu s runtime sloupci v tabulce CRONS. Stav běhu je nyní v Redisu, historie v Elasticsearch.

Index historie zakládá až migrace Elasticsearch (npm run migrate elastic / migrate init), a jen je-li nastaveno integrations.elastic.index. Bez ní crony běží normálně, ale Monitor nemá z čeho počítat historii.

Provozujete-li víc cron workerů, je Redis povinný. Bez režimu cache.mode = "redis" je zámek jen atrapa a každá cache je lokální pro proces – dva workery pak mohou spustit tentýž cron současně.

1.3 Vytvoření záznamu ≠ instalace kódu

Toto je nejčastější zdroj nedorozumění:

  • Třída cronu existuje v kódu vždy. Nedá se „doinstalovat“ ani „odinstalovat“.
  • Admin z třídy v UI vytvoří pojmenovaný záznam v tabulce CRONS – teprve ten má vlastní rozvrh, parametry a příznak aktivní/neaktivní.
  • Dokud pro cron neexistuje aktivní záznam, úloha se nikdy nespustí.
  • U některých cronů dává smysl vytvořit víc záznamů (jeden na každou schránku, import, účet) – viz 2.7.
  • Název záznamu (DISPLAY_NAME) musí být v rámci instance unikátní.

1.4 Výchozí stav a předpřipravené crony

Pole defaultStatus v kódu neznamená, že cron po instalaci běží. Znamená jen, že dialog „Přidat cron“ předvyplní přepínač aktivní.

Na čerstvé instalaci navíc seed migrace založí 9 záznamů – a to všechny neaktivní (IS_ACTIVE = false). Migrace vkládá data pouze tehdy, je-li tabulka CRONS prázdná, takže existující instance se upgradem nezmění.

Předseedovaná devítka je shodná s devíti crony, které mají defaultStatus = A:

  • AdSyncCron
  • CompetenceGeneratorCron
  • iDokladSynchronizationCron
  • MsGraphCreateProcessesFromMailCron
  • MsGraphCheckUnprocessedMailsCron
  • PhotosCleanupCron
  • RunProcess
  • TemplateProcessShredding
  • XMLProcessImportCron
Prakticky to znamená: po čerstvé instalaci TAS 5.19 neběží žádný cron. Každý z předseedovaných potřebuje nejdřív externí integraci nebo doplnění konfigurace, proto jsou vloženy vypnuté. Zbylých 19 cronů nemá po instalaci ani záznam.

1.5 Formát rozvrhu

Cron výraz má v TAS 6 polí – oproti běžnému unixovému cronu je navíc pole sekund:

sekunda  minuta  hodina  den-v-měsíci  měsíc  den-v-týdnu
0-59 0-59 0-23 1-31 1-12 0-6 (0 = neděle)

Výraz

Význam

00 30 01 * * *

každý den v 01:30

00 */5 * * * *

každých 5 minut

0 0 2 * * 6

každou sobotu ve 2:00

50 */5 3-19 * * *

každých 5 minut mezi 3:00 a 19:59, v 50. sekundě

* * * * * *

každou sekundu – téměř nikdy to není záměr

Formulář v administraci výraz kontroluje a neplatný odmítne hláškou Neplatná syntaxe cronu; zároveň pod polem ukazuje čitelný popis rozvrhu – ten si vždy přečtěte, je to nejrychlejší kontrola překlepu.

Kontrola syntaxe je pouze na straně formuláře. Backend u zápisu ověřuje jen to, že aktivovaný cron má rozvrh vyplněný, nikoli že je platný. Cron založený přes API s vadným výrazem se proto uloží bez chyby, ale nikdy se nenaplánuje – v Monitoru se pozná podle prázdné hodnoty Následující spuštění.

1.6 Co umí obrazovka Crony (5.19)

Verze 5.19 přinesla proti starším verzím několik novinek, které stojí za to znát:

  • Technický název je sloupec v přehledu a dá se podle něj filtrovat (technický název = třída, kterou plánovač skutečně spouští).
  • Aktivovat / Deaktivovat přímo z tříteckového menu řádku, bez otevírání detailu.
  • Import / Export definice cronu jako JSON (tlačítko v detailu). Slouží k přenosu konfigurace mezi prostředími. Import cizího technického názvu je odmítnut.
  • Logy – tlačítko v hlavičce detailu otevře prohlížeč logů omezený na daný cron.
  • Tovární nastavení – obnoví rozvrh, popis, parametry i příznak aktivity z výchozích hodnot třídy. Uživatelsky zadaný název zůstane zachován. (Ve starších verzích reset u již nakonfigurovaného cronu nedělal nic.)
  • Terminovat crony – pošle všem cron workerům pokyn ke korektnímu ukončení. Běžící úlohy se nechají dokončit, takže v pracovní době může operace zpracování zdržet.
  • U MS Graph cronů: Discover folders (živé procházení stromu složek schránky přes Microsoft Graph, včetně převzetí ID složky do konfigurace) a možnost uložit clientSecret jako odkaz do trezoru ve tvaru {{vault:název}} místo otevřeného textu.
Export obsahuje parametry včetně hesel v otevřené podobě – nakládejte s ním jako s tajemstvím.

Po „Terminovat crony“ aplikace workery sama znovu nespustí. Procesy se ukončí a jejich opětovné nastartování je věcí orchestrátoru (restart policy v Dockeru / Kubernetes). Na prostředí bez automatického restartu tímto tlačítkem crony vypnete, dokud je někdo nespustí ručně.

1.7 Globální konfigurace cronů

Nastavuje se přes env proměnné (statická konfigurace), případně přes dynamickou konfiguraci v application.crons.

Proměnná

Výchozí

Význam

TAS_CRONS_RUN_ON_START

true

Hlavní vypínač plánovače. Při false cron worker nastartuje, ale nezaregistruje žádný časovač – nespustí se nic. Do logu zapíše CronJob server not-started - deactivated in configuration by crons.runOnStart.

TAS_CRONS_HEARTBEAT_INTERVAL

25000 ms

Jak často worker hlásí, že běh žije.

TAS_CRONS_HEARTBEAT_TIMEOUT

95000 ms

Po jaké době bez signálu je běh považován za mrtvý.

TAS_CRONS_HEARTBEAT_MONITOR_INTERVAL

40000 ms

Jak často monitor kontroluje zastaralé signály.

TAS_CRONS_CONSECUTIVE_FAILURE_THRESHOLD

5

Počet selhání v řadě, než se odešle upozorňovací e-mail.

TAS_ELASTIC_CRON_RUN_INDEX_NAME

hlavní index + -cron-runs

Elasticsearch index pro historii běhů.

Dále v dynamické konfiguraci application.crons:

Klíč

Výchozí

Význam

sendErrorMailAddresses

["error@teamassistant.cz"]

Adresy pro notifikaci o selhání cronu.

msGraphErrorMailAddresses

["error@teamassistant.cz"]

Adresy pro notifikaci o selhání MS Graph cronů.

consecutiveFailureThreshold

5

Práh selhání v řadě (přebíjí env).

Výchozí adresy error@teamassistant.cz jsou interní adresy dodavatele. Na produkci je nahraďte vlastními, jinak upozornění o selhání cronů nikdo z vaší strany nedostane.

Dokumentace env proměnné uvádí výchozí práh 3, ale efektivní hodnota použitá aplikací je 5. Pokud na hodnotě záleží, nastavte ji explicitně.

Na tyto adresy chodí dva druhy upozornění:

Předmět

Kdy

[CRON - FAILED <práh>x] - <název>

Cron selhal tolikrát v řadě, kolik je práh. Znovu se odešle až po dalším úspěšném běhu a novém překročení prahu.

[CRON - UNHEALTHY] - <název>

Monitor průběžně zjistil, že cron je zpožděný (overdue) nebo běží déle, než je obvyklé. Opakování je omezeno (nejméně 1 hodina).

1.8 Indikátory v Monitoru cronů

Monitor ve výchozím stavu zobrazuje jen aktivní crony; neaktivní se přidají přepínačem Zobrazit neaktivní. Crony si lze označit hvězdičkou jako oblíbené (ukládá se per uživatel) a připnout je tak na začátek seznamu. Statistiky (úspěšnost, průměrné trvání) se počítají za zvolené období: 1 h, 8 h, 1 den (výchozí), 3 dny, 1 týden, vše. Tlačítko „i“ otevře nápovědu k indikátorům.

Indikátor

Význam

Stav

Semafor: zelená = v pořádku, žlutá = vyžaduje pozornost, červená = selhává. Vychází z posledních běhů, počtu selhání v řadě a z toho, zda naplánované běhy startují včas.

Typ cronu

PLATFORM = vestavěný, PLUGIN = z pluginu (v 5.19 se nevyskytuje).

Časování cronu

Cron výraz určující spouštění; počítá se z něj „Následující spuštění“.

Následující / Poslední spuštění

Čas dalšího plánovaného startu a začátek posledního běhu.

Dokončeno / Trvání

Kdy poslední běh skončil a jak dlouho trval (v sekundách).

Výsledek posledního běhu

Dokončený, Chyba, Běžící nebo Zabitý.

Poslední úspěch

Kdy cron naposledy doběhl úspěšně.

Prezenční signál

Kdy worker naposledy nahlásil cron jako živý. Zastaralý signál během běhu značí zaseknuté spuštění.

Úspěšnost

Podíl úspěšných běhů ve zvoleném období (v závorce celkový počet běhů).

Průměrné trvání

Průměrná délka běhu ve zvoleném období.

Selhání v řadě

Po dosažení prahu se odešle e-mail; počítadlo se nuluje prvním úspěšným během.

Instance

Který worker (a PID) právě běh provádí.

Varování

Krátký důvod, proč je cron žlutý/červený – např. selhání posledního běhu nebo zpožděný naplánovaný běh (overdue).

2. Kompletní přehled cronů (TAS 5.19)

Sloupec Stav: A = dialog „Přidat cron“ předvyplní aktivní, N = předvyplní neaktivní. Ani jedno neznamená, že cron po instalaci běží (viz 1.4). Rozvrh i stav lze při zakládání libovolně přepsat.

2.1 Jádro plánování a workflow

Název (technický název)

Výchozí rozvrh

Stav

Co dělá

Run planned processes (PlanCron)

00 */1 * * * * – každou minutu

N

Spouští procesy naplánované na konkrétní datum a čas a dokončuje uzavřené plány. Bez parametrů.

Run scheduled tasks and events (PARALLEL) (PostponedTaskCron)

01 */5 * * * * – každých 5 min

N

Aktivuje čekající naplánované úkoly a události (timer/deadline uzly ve workflow). Používá distribuovaný zámek, takže smí běžet na víc workerech bez duplicit.

Parametry PostponedTaskCron:

Parametr

Výchozí

Význam

fromTime

null

Spodní časová hranice (ISO řetězec nebo timestamp v ms).

lockTtl

1800000 (30 min)

Doba platnosti zámku proti paralelní aktivaci.

limit

1000

Max. položek na běh (zvlášť pro události a úkoly).

startFromNewest

false

true = od nejnovějších, false = od nejstarších.

Bez těchto dvou cronů se nespustí nic, co je ve workflow naplánováno na pozdější dobu – odložené procesy, časované úkoly ani deadline notifikace. Přesto pro ně čerstvá instalace nezakládá ani záznam. Viz doporučení v kapitole 3.

2.2 Pošta a notifikace

Název (technický název)

Výchozí rozvrh

Stav

Co dělá

Send task notifications emails (MailTasksCron)

00 */5 * * * * – každých 5 min

N

Odesílá splatné e-mailové notifikace o úkolech z fronty MAIL_QUEUE. Parametr status: A = odeslat splatné (výchozí), F = přeposlat neúspěšné.

Send task reports and deadlines. (MailReportsCron)

00 00 06 * * 1-5 – prac. dny 6:00

N

Rozesílá denní reporty úkolů a eskalace blížících se a prošlých termínů manažerům a nadřízeným. Bez parametrů.

Send Custom Views to subscribers (MailCustomViewsCron)

00 00 * * * 1-5 – prac. dny, hodinově

N

Rozesílá přehledy (Custom Views) odběratelům, kteří k nim mají práva. Parametr emailSendingConcurrency (výchozí 10).

Send mail with usage statistics (MailUsageStatisticsCron)

00 00 00 01 * * – 1. den v měsíci o půlnoci

N

Odešle e-mailem statistiky využití za minulý měsíc.

Password Expiration Notification Mails (PasswordExpirationNotificationCron)

00 22 * * * * – hodinově v :22

N

E-maily uživatelům, kterým se blíží expirace hesla. Bez parametrů.

Secret store & API token validation (B2bAndSecretStoreValidationCron)

00 00 05 * * * – denně 5:00

N

Hlídá expirující a expirované záznamy v trezoru (secret store) a API tokeny, volitelně pošle e-mail.

Parametry MailUsageStatisticsCron:

Parametr

Výchozí

Význam

addresses

["licence@neit.cz"]

Příjemci měsíčního reportu.

includeStatisticsFile

true

Přiložit soubor se statistikou dokončených úkolů.

Výchozí příjemce je interní adresa dodavatele. Před aktivací nastavte vlastní adresy.

Parametry B2bAndSecretStoreValidationCron:

Parametr

Výchozí

Význam

expiringDays

7

Kolik dní dopředu hlídat expiraci.

sendMail

true

Poslat e-mail při nálezu.

mailAddresses

["error@teamassistant.cz"]

Příjemci upozornění.

Rovněž výchozí adresa dodavatele – nahraďte vlastní.

PasswordExpirationNotificationCron reálně nic neodešle, dokud není v Administrace → Zabezpečení zapnuté expirationEmailEnabled a nastavená doba expirace hesla.

2.3 Údržba dat a úložiště

Název (technický název)

Výchozí rozvrh

Stav

Co dělá

Remove old logs. (DeleteLogs)

00 00 02 */1 * * – denně 2:00

N

Maže staré aplikační a kalkulační logy podle retence v parametrech.

Cleanup old data from Database and from other parts of app. (CleanupCron)

00 23 1 1 * * – 1. den v měsíci v 01:23

N

Maže staré řádky z vybraných tabulek a čistí dočasné adresáře.

Archivation of Processes (ArchivationCron)

00 00 00 * * * – denně o půlnoci

N

Přesouvá do archivu instance procesů, jejichž šablona má nastavenou archivaci. Parametr limit (výchozí 1000).

Template process shredding (TemplateProcessShredding)

00 30 2 * * * – denně 2:30

A

Trvale skartuje instance procesů po uplynutí odkladu skartace nastaveného na šabloně. Parametr limit (výchozí 1000).

Profile photos cleanup (PhotosCleanupCron)

* * 23 * * 1 – pozor, viz varování níže

A

Maže profilové fotky, které jsou na disku, ale už nejsou v databázi. Bez parametrů.

Generate Thumbnails (GenerateThumbnailsCron)

00 00 02 * * * – denně 2:00

N

Dogeneruje náhledy obrázkových souborů v DMS, které je ještě nemají. Parametry batchSize (100), offset (0).

Index DMS files. (DmsFileIndexingCron)

00 00 01 * * * – denně 1:00

N

Fulltextově indexuje soubory DMS na pozadí (Tika + Elasticsearch).

Parametry DeleteLogs (dny retence):

Parametr

Výchozí

Význam

errorWarn

20

Logy úrovně error a warn starší než X dní.

infoAndLower

10

Logy úrovně info a nižší.

calculationLogs

10

Kalkulační logy.

meta

30

Metadata logů.

Cron si chybějící hodnoty doplní z výchozích, takže funguje i s prázdnými parametry.

Parametry CleanupCron:

  • cleanupTmp (výchozí true) – smaže a znovu vytvoří dočasné podadresáře. Doporučeno ponechat zapnuté.
  • tables – pole položek { name, keepDays, limit, processStatuses? }.

Výchozí sada tabulek:

Tabulka

keepDays

limit

PERFORMANCE_LOGS

730

1000

EVENT_PARAM

730

1000

CRON_RUNS

730

1000

DMS_FILE_ACCESS_LOG

730

1000

MAIL_QUEUE (jen stav D)

730

1000

AI_LLM_TOOL_CALL

180

5000

AI_LLM_RUN

180

5000

AI_USER_ACTION_REQUEST

180

5000

AI_CONVERSATION_MEMORY

360

5000

AI_MESSAGE

360

5000

AI_AGENTIC_WORKFLOW

360

1000

AI_CONVERSATION

360

1000

Položka CRON_RUNS není databázová tabulka (ta byla v 5.19 zrušena) – je to zástupný název, pod kterým se maže historie běhů cronů v Elasticsearch (delete-by-query podle data dokončení). Hodnota limit se u této položky ignoruje, uplatní se jen keepDays.

Pokud uložené parametry pole tables neobsahují (např. při založení cronu přes API bez parametrů), cron jen zaloguje informaci a nic neuklidí. Výchozí sada se předvyplní jen při zakládání přes formulář v UI.

limit je počet řádků na jeden běh. Výchozí 1000 řádků jednou měsíčně na velké instanci nemusí stačit – sledujte, zda tabulky skutečně klesají, a případně limit zvyšte nebo cron spouštějte častěji.

Parametry DmsFileIndexingCron: errored (false), current (true), reindexAll (nenastaveno), maxIndexedFiles (nenastaveno = neomezeně), blockedRuntimeHours ([] – hodiny, ve kterých se běh ukončí chybou, aby indexace nezasahovala do provozu), indexingConcurrency (1).

Cron selže hned na startu, pokud není nastaveno integrations.tika.url (chyba tikaUrl not set!) nebo integrations.elastic.index (Fulltext is not set!).

Rozvrh Profile photos cleanup je * * 23 * * 1. V poli sekund i minut je hvězdička, takže výraz znamená každou sekundu po celou hodinu 23:00 každé pondělí, ne jednou týdně, jak název napovídá. Při zakládání záznamu nastavte vlastní rozvrh, např. 00 00 23 * * 1.

2.4 Databáze a infrastruktura

Název (technický název)

Výchozí rozvrh

Stav

Co dělá

Elastic indices cleanup (ElasticsearchIndicesCleanupCron)

00 */10 * * * * – každých 10 min

N

Přesáhne-li logovací index v Elasticsearch maxIndexSize, maže nejstarší indexy, dokud se nedostane pod targetSize.

Run database health report (DatabaseHealthReportCron)

0 0 1 * * 6 – sobota 1:00

N

Vygeneruje report o zdraví databáze (fragmentace indexů, náročné dotazy, metriky cache). Do dat nezasahuje.

Run database index rebuild (DatabaseIndexRebuildCron)

0 0 2 * * 6 – sobota 2:00

N

Aktivně přestavuje fragmentované indexy nad zadanými prahy.

  • Parametry ElasticsearchIndicesCleanupCron: maxIndexSize ("15gb"), targetSize ("12gb"). Relevantní jen při logging.loggerType = "elastic".
  • Parametry DatabaseHealthReportCron (všechny povinné): pageCountThreshold (1000), fragmentationThreshold (30 %), heavyQueryLimit (50).
  • Parametry DatabaseIndexRebuildCron (všechny povinné): pageCountThreshold (1000), fragmentationThreshold (30 %), indexRebuildTimeoutInSeconds (120, jen PostgreSQL).
Oba databázové crony selžou s jasnou chybou, pokud nemají uložené parametry – jejich schéma je označuje jako povinné.

2.5 Bezpečnost, role a práva

Název (technický název)

Výchozí rozvrh

Stav

Co dělá

AD sync (AdSyncCron)

00 00 02 * * * – denně 2:00

A

Synchronizuje uživatele a skupiny z Active Directory / LDAP.

Competence generator (CompetenceGeneratorCron)

00 00 04 * * * – denně 4:00

A

Generuje a maže role přiřazené přes kompetence, volitelně přestaví jejich indexy.

Sync process rights. (SyncProcessRightsCron)

00 00 03 * * * – denně 3:00

N

Přepočítá a synchronizuje externí přístupová práva k procesům. Bez parametrů.

  • AdSyncCron zpracovává pouze autority s AUTH_MODULE = 'ldap' a AUTH_SYNC_ENABLED = 'Y'. Bez nakonfigurované LDAP autority se synchronizací tedy neudělá nic – je bezpečný i na instanci bez AD.
  • Parametry CompetenceGeneratorCron: rebuildIndexesAfterGenerating (true), forceRebuildForAllCompetences (false).

2.6 Statistiky a intranet

Název (technický název)

Výchozí rozvrh

Stav

Co dělá

Gather usage statistics (UsageStatisticsCron)

00 30 01 * * * – denně 1:30

N

Sbírá interní statistiky používání TAS. Podklad pro měsíční report i pro licenční účely. Bez parametrů.

Publish posts (PublishPostsCron)

00 00 00 * * * – denně o půlnoci

N

Publikuje naplánované příspěvky na nástěnce s datem publikace v minulosti a skrývá ty, kterým vypršelo zobrazení. Parametr fromTime (výchozí null).

MailUsageStatisticsCron rozesílá to, co nasbírá UsageStatisticsCron. Zapínat měsíční rozesílku bez denního sběru nemá smysl.

2.7 Integrace – konfigurovatelné šablony

Tyto crony se nezapínají globálně. Admin z nich typicky vytvoří jeden pojmenovaný záznam pro každý konkrétní případ použití (jiná schránka, jiný zdroj XML, jiný účet), s vlastním rozvrhem a parametry.

Název (technický název)

Výchozí rozvrh

Stav

Co dělá

Instantiate process (RunProcess)

* * * * * * – pozor, každou sekundu

A

Zakládá instance zadaných šablon procesů podle rozvrhu.

Create Processes from XML files. (XMLProcessImportCron)

00 01 * * * * – hodinově v :01

A

Importuje XML soubory z adresáře, z každého vytvoří instanci procesu a naplní proměnné z atributů XML. Umí připojit soubor do DMS a poslat souhrnný e-mail.

Synchronize iDoklad with a dynamic table. (iDokladSynchronizationCron)

00 00 */12 * * * – každých 12 h

A

Synchronizuje vystavené doklady z účtu iDoklad do dynamické tabulky podle namapovaných sloupců.

Create Processes from MS Graph mails (MsGraphCreateProcessesFromMailCron)

50 */5 3-19 * * * – každých 5 min mezi 3:00 a 19:59

A

Stahuje e-maily z nakonfigurovaných schránek přes MS Graph a z každého vytvoří případ (mapování polí, přílohy do DMS).

Check unprocessed MS Graph mails (MsGraphCheckUnprocessedMailsCron)

00 00 */1 * * * – hodinově

A

Kontroluje, zda ve složce „zpracováno“ nezůstaly e-maily bez odpovídajícího případu, a pošle report.

RunProcess – parametr items[]: header_id (ID šablony), iproc_name (název případu), user_id (zakladatel, Admin = 1), orgstr_id (organizační jednotka, Root = 1).

Výchozí rozvrh * * * * * * znamená doslova každou sekundu a výchozí položka má header_id: null, takže se přeskočí a jen zaloguje varování. Při zakládání záznamu vždy nastavte reálný rozvrh a vyplňte platné header_id, jinak cron zbytečně vytěžuje worker a zaplavuje log.

iDokladSynchronizationCron – parametrem je pole konfigurací (clientId, clientSecret, dynamicTableIdentificator, mapping, pairBy – výchozí documentNumber, includeCreditNotes, includeProformaInvoices). Předseedovaná konfigurace má prázdné přihlašovací údaje, takže cron bez doplnění nic neudělá.

XMLProcessImportCron – parametr items[] s cestou k XML, mapováním na šablonu a proměnné, chováním ke zdrojovým souborům a limity. Jeden záznam zvládne víc konfigurací v poli items.

MS Graph crony – konfigurace je per schránka (autentizace, vstupní a výstupní složka, mapování polí e-mailu na proměnné, práce s přílohami, souhrnné a chybové e-maily). V 5.19 platí:

  • Jedna rozbitá schránka nebo jeden rozbitý e-mail už neshodí celý běh – zpracovávají se izolovaně a běh pošle jeden souhrnný e-mail [MS-GRAPH - FAILED].
  • Zpracovávají se jen zprávy, jejichž MAPI třída odpovídá povolenému prefixu (výchozí IPM.Note) – pozvánky, doručenky a odpovědi mimo kancelář se přesunou do výstupní složky bez založení případu.
  • attachEmailAsPdf (výchozí vypnuto) připojí e-mail k případu jako PDF v jazyce aplikace.
  • U nově zakládaných cronů je useEmailObjectInDataHolder nastaveno na false, aby se mapování polí skutečně projevilo.
  • Parametr amountOfEmailByRun (předseedováno 100) omezuje počet e-mailů na jeden běh.
  • MsGraphCheckUnprocessedMailsCron používá parametr numberOfDays (předseedováno 7) a měl by mít stejná pravidla schránek jako importní cron, jinak bude hlásit falešné nálezy.

3. Doporučení – které crony mít nainstalované

„Nainstalovaný“ cron = existující a aktivní záznam v Administrace → Crony. Připomínáme, že po čerstvé instalaci TAS 5.19 neběží žádný cron – devět jich má založený záznam, ale všechny neaktivní, zbylých devatenáct nemá ani záznam.

3.1 Nutné minimum – aktivujte prakticky vždy

Bez těchto přicházíte o základní funkčnost workflow enginu, nebo vám neomezeně roste úložiště. Ani jeden z nich přitom není po instalaci připraven.

Cron

Proč

Run planned processes (PlanCron)

Bez něj se nikdy nespustí nic naplánovaného na budoucí datum.

Run scheduled tasks and events (PARALLEL) (PostponedTaskCron)

Bez něj se neaktivují časované a odložené kroky workflow (timer, deadline).

Remove old logs. (DeleteLogs)

Jinak logy rostou neomezeně. Funguje i s výchozími parametry.

Cleanup old data from Database… (CleanupCron)

Jinak rostou PERFORMANCE_LOGS, MAIL_QUEUE, historie běhů v Elasticsearch a AI tabulky. Na instancích s aktivně používaným AI asistentem to bývá nejrychleji rostoucí data. Zkontrolujte, že se uložilo pole tables.

Send task notifications emails (MailTasksCron)

Prakticky vždy – bez něj uživatelům nechodí notifikace o úkolech. Vynechte jen, pokud instance e-maily záměrně neposílá.

3.2 Bezpečné nechat aktivní, i když je zatím nevyužíváte

Tyto crony jsou bez odpovídající konfigurace neškodné (nic nenajdou, nic neudělají), takže je můžete zapnout dopředu.

Cron

Poznámka

AD sync

Bez LDAP autority se synchronizací nedělá nic.

Competence generator

Bez kompetencí nemá co generovat.

Template process shredding

Bez nastavené skartace na šabloně nic neskartuje. Jakmile ji nastavíte, cron ji vykoná.

Profile photos cleanup

Jen po opravě rozvrhu na 00 00 23 * * 1 – výchozí výraz běží každou sekundu.

Gather usage statistics

Lehký, sbírá podklady pro licenční a měsíční reporty. Doporučeno mít zapnutý.

3.3 Zapněte jen podle skutečně používaných funkcí

Cron

Kdy má smysl

Send task reports and deadlines.

Chcete-li denní reporty a eskalace termínů manažerům a nadřízeným.

Send Custom Views to subscribers

Používáte-li odběry přehledů.

Send mail with usage statistics

Chcete-li měsíční report. Nejdřív nastavte vlastní příjemce místo licence@neit.cz. Vyžaduje běžící Gather usage statistics.

Password Expiration Notification Mails

Jen při zapnuté expiraci hesel v Zabezpečení.

Secret store & API token validation

Používáte-li trezor nebo API tokeny pro integrace. Nastavte vlastní mailAddresses.

Archivation of Processes

Jen mají-li šablony nastavenou archivaci.

Index DMS files.

Jen je-li nakonfigurován Tika + Elasticsearch – jinak selže na každém běhu.

Generate Thumbnails

Chcete-li náhledy obrázků v DMS i pro soubory nahrané dříve. Jednorázově nebo dočasně; po dogenerování lze vypnout.

Sync process rights.

Jen tam, kde se využívají externí přístupová práva k procesům.

Elastic indices cleanup

Jen při logování do Elasticsearch (loggerType = "elastic").

Publish posts

Jen používáte-li plánované příspěvky na nástěnce.

3.4 Databázová údržba – opatrně

  • Run database health report – doporučeno zapnout na produkci. Pouze čte, nic nemění, a dá vám podklad pro rozhodnutí.
  • Run database index rebuildnezapínejte naslepo. Aktivně přestavuje indexy a může výrazně zatížit databázový server.
Doporučený postup u Run database index rebuild: nechte běžet report, vyhodnoťte ho, a rebuild spouštějte ručně v servisním okně. Pokud ho zautomatizujete, ověřte, že sobotní 2:00 je pro vaši instanci skutečně klidné okno.

3.5 Integrace – zakládejte cíleně, ne plošně

RunProcess, XMLProcessImportCron, iDokladSynchronizationCron a oba MS Graph crony se nezapínají jako celek. Založte pojmenovaný záznam přímo pro konkrétní integraci a nastavte mu vlastní rozvrh.

  • Předseedované záznamy těchto cronů mají prázdnou nebo ukázkovou konfiguraci. Buď je doplňte, nebo je nechte neaktivní – aktivní záznam s neúplnou konfigurací sice nic nerozbije, ale zbytečně běží a plní log varováními.
  • U RunProcess vždy přepište rozvrh – výchozí * * * * * * je každou sekundu.
  • Oba MS Graph crony nastavte se shodnými pravidly schránek, jinak kontrolní cron hlásí falešné nálezy.
  • Pro clientSecret použijte odkaz do trezoru {{vault:název}} místo otevřeného textu – zejména proto, že export definice cronu obsahuje hesla v čitelné podobě.

3.6 Doporučená konfigurace prostředí

Nezávisle na jednotlivých cronech nastavte:

  1. application.crons.sendErrorMailAddresses a msGraphErrorMailAddresses na vlastní adresy (výchozí error@teamassistant.cz je adresa dodavatele).
  2. TAS_CRONS_CONSECUTIVE_FAILURE_THRESHOLD explicitně, pokud vám záleží na citlivosti upozornění (efektivní výchozí hodnota je 5).
  3. Ověřte, že běží alespoň jeden cron worker – ve Stavu systému musí být vidět backend typu Cron – a že TAS_CRONS_RUN_ON_START není false.
  4. Provozujete-li víc cron workerů, zajistěte Redis (cache.mode = "redis"). Bez něj neplatí ochrana proti dvojímu spuštění téhož cronu.
  5. Zajistěte, že cron workery mají automatický restart (restart policy). Aplikace je po ukončení sama nenastartuje.
  6. Spusťte migraci Elasticsearch, jinak nebude k dispozici historie běhů ani statistiky v Monitoru.

4. Kontrola po instalaci nebo upgradu

  1. Administrace → Crony – projděte seznam a ověřte, že crony z kapitoly 3.1 Nutné minimum mají založený a aktivní záznam. Po čerstvé instalaci je musíte založit nebo aktivovat ručně.
  2. Monitor cronů – přepněte na Zobrazit neaktivní, zkontrolujte, že žádný aktivní cron nemá červený stav, nízkou úspěšnost ani varování overdue.
  3. Parametry – u cronů s výchozími adresami dodavatele (MailUsageStatisticsCron, B2bAndSecretStoreValidationCron) a u retenčních pravidel (DeleteLogs, CleanupCron) projděte hodnoty a upravte je podle reálných požadavků instance.
  4. Rozvrhy – u PhotosCleanupCron a RunProcess ověřte, že rozvrh není ponechán na výchozí „každou sekundu“.
  5. Po upgradu z verze starší než 5.19 – migrace normalizuje uložené parametry proti schématům cronů. Každý přepsaný záznam zapíše varování s původním a novým JSON.
Po upgradu z verze starší než 5.19 projděte logy migrace. Záznamy, které se nepodařilo automaticky opravit, zůstanou nezměněné a je nutné je upravit ručně v administraci.

5. Řešení potíží

Příznak

Kde hledat

Nespouští se vůbec nic

Ověřte TAS_CRONS_RUN_ON_START – při false plánovač vůbec nenastartuje. Dále zda běží backend typu Cron.

Cron se vůbec nespouští

Existuje záznam a je aktivní? Je rozvrh platný (viz Následující spuštění v Monitoru)?

Tentýž cron proběhl dvakrát

Běží víc cron workerů bez Redisu – zámek proti souběhu vyžaduje cache.mode = "redis".

Po „Terminovat crony“ se nic nespustilo

Workery se korektně ukončily, ale nikdo je nerestartoval. Restart zajišťuje orchestrátor, ne aplikace.

Cron je overdue

Worker byl vypnutý nebo přetížený; zkontrolujte prezenční signál a instanci v Monitoru.

Běh visí ve stavu Běžící

Zastaralý prezenční signál = zaseknuté spuštění. Po timeoutu (výchozí 95 s) se běh vyhodnotí jako mrtvý; pomůže Terminovat crony.

Cron opakovaně selhává

Tlačítko Logy v detailu cronu otevře logy omezené na tento cron. Po dosažení prahu selhání v řadě přijde e-mail na sendErrorMailAddresses.

Parametry nejdou uložit

Chybová hláška pojmenuje konkrétní vadné nastavení. Přes API se nevalidní parametry odmítnou s INVALID_CRON_PARAMETERS.

Cron „nic nedělá“ bez chyby

Většina cronů je bez odpovídající konfigurace no-op – viz poznámky u jednotlivých cronů v kapitole 2.

Historie běhů chybí

Historie je v Elasticsearch. Zkontrolujte, že proběhla migrace Elasticsearch a je nastaveno integrations.elastic.index. Výpadek ES nezastaví běh cronů, jen se neuloží záznam.

Frantisek Brych Updated by Frantisek Brych

Paralelní cron - PostponedTaskCron

CleanupCron

Contact

Team assistant (opens in a new tab)

Powered by HelpDocs (opens in a new tab)