KEPLIN Docs

Tidsplaner

Sette et skript til å kjøre av seg selv — gjentakelser, bestemte tidspunkter i kalenderen, overvåkingsvinduer med validering, tidssoner og innhenting av kjøringer som uteble.

En tidsplan (cron) setter et skript til å kjøre av seg selv: hver dag kl. 07.00, hvert 15. minutt, siste fredag i måneden, eller hvert 5. minutt i et nattvindu til dagens arbeid er gjort. Ett skript kan ha flere tidsplaner, hver med sitt klokkeslett, sin tidssone og sine argumenter.

På denne siden bruker vi tidsplanen Indicadores diários i appen Kundeadministrasjon, som kjører skriptet atualizar_indicadores hver dag kl. 07.00 (tidssonen Europe/Lisbon).

Opprette og åpne tidsplaner

I sidetreet utvider du noden til skriptet. Linjen Tidsplaner viser hvor mange som finnes; under den vises hver tidsplan med navnet, klokkeslettet i kortform og, når den er slått av, merket (deaktivert).

  • For å opprette: klikk på + på linjen Tidsplaner (Ny tidsplan). Editoren åpnes i en ny fane.
  • For å redigere: klikk på navnet til tidsplanen.
  • I menyen til hver tidsplan finner du Aktiver/Deaktiver og Slett. Å slette stopper tidsplanen for godt, men historikken over kjøringer av skriptet blir liggende.

Tidsplanen Indicadores diários — hver dag kl. 07:00 (Europe/Lisbon), med panelet Kjøringer til høyre.
Tidsplanen Indicadores diários — hver dag kl. 07:00 (Europe/Lisbon), med panelet Kjøringer til høyre.

Editoren har skjemaet til venstre og panelet Kjøringer til høyre (først etter at den er lagret — se slutten av siden). Øverst slår bryteren Aktiv tidsplanen på og av, og Lagre lagrer alt.

Velge frekvensen

Feltet Frekvens tilbyr tre kort — tre slags tidsplaner:

Kort Passer til
Gjenta «Hvert N. minutt eller hver N. time, uten stans.» Sondering, kontinuerlig synkronisering.
På bestemte tidspunkter «På et klokkeslett i døgnet, på de dagene du velger.» Klassikeren: daglig, ukentlig, månedlig.
Overvåkingsvindu «Sonder hvert N. minutt mellom to klokkeslett, og stopp når dagens arbeid er gjort.»

Under kortene bytter snarveien Skriv uttrykket for hånd ut kontrollene med et fritt cron-felt, Uttrykk — for den som allerede har ett. Det tar imot 5 eller 6 felt (med sekunder), f.eks.: 0 9 * * 1-5. Tilbake til kontrollene angrer byttet.

Gjenta

  1. Velg kortet Gjenta.
  2. Under Enhet velger du minutter eller timer.
  3. Med minutter angir du Hvor mange minutter mellom hver gang? (f.eks. 15). Med timer angir du På minuttet — minuttet i hver time den utløser på (f.eks. 0 kjører kl. 09.00, 10.00, 11.00 …).

På bestemte tidspunkter

  1. Velg kortet På bestemte tidspunkter.

  2. Under Gjentas velger du varianten:

    Alternativ Feltene som dukker opp
    Hver dag (på de valgte dagene) Klokken + Dager — sju knapper (Man … Søn) med snarveiene Alle, Hverdager og Helg. Enhver kombinasjon duger: mandag, onsdag og fredag, for eksempel.
    Én gang i uken Klokken + Ukedag.
    Én gang i måneden Klokken + I måneden kjører den (se nedenfor).
  3. For det månedlige har I måneden kjører den tre former:

    Alternativ Eksempel
    På en fast dag Den 1., den 15. … Med Dag i måneden over 28 sier editoren fra: «I måneder uten den dagen kjører den ikke. For «siste dag» bruker du det egne alternativet.»
    På en posisjon (f.eks. siste fredag) Posisjon (1., 2., 3., 4., 5. eller siste) + Ukedag — f.eks. den siste fredagen i måneden.
    På den siste dagen i måneden Den 31., 30., 28. eller 29. — det måneden nå har.

Tidssonen

Hver tidsplan har en Tidssone — klokkeslettene du angir er klokkeslett i den sonen, ikke på serveren. Velgeren lister opp alle IANA-sonene, med søk (f.eks. Lisbon, Sao_Paulo). En tidsplan kl. 09.00 i America/Sao_Paulo kjører kl. 09.00 i São Paulo, selv med serveren i Europa — og overgangene til og fra sommertid tar plattformen seg av.

Hvis en kjøring uteblir

Noen ganger passerer det avtalte klokkeslettet uten kjøring: serveren var slått av, den startet på nytt underveis, eller den forrige kjøringen pågikk fortsatt. Seksjonen Hvis en kjøring uteblir bestemmer hva som skjer med slike tilfeller:

Alternativ Følge
Ignorer Henter ikke inn. Det registreres at kjøringen gikk tapt (statusen Tapt i panelet Kjøringer).
Bare den siste Henter inn den siste som uteble; de tidligere registreres som tapte.
Alle Henter inn alle som uteble, i den rekkefølgen de var planlagt.

De innhentede kjøringene vises i historikken til skriptet med opphavet Innhenting.

Nota

I et overvåkingsvindu er enheten for innhenting dagen: å hente inn kjører dagens arbeid selv etter at vinduet er lukket — det gjentar ikke sonderingene én etter én.

Overvåkingsvindu

Det tredje kortet løser et mønster den klassiske cron-en ikke uttrykker: «fra kl. 18.00, prøv hvert 5. minutt; når du får det til, kjør én gang og stopp til i morgen». Typisk når du venter på at en fil skal komme, at en dagsavslutning skal bli ferdig i et annet system, eller at en tabell skal bli fylt.

En tidsplan i Overvåkingsvindu — intervall, klokkeslettene til vinduet, dager og retningslinjen for innhenting.
En tidsplan i Overvåkingsvindu — intervall, klokkeslettene til vinduet, dager og retningslinjen for innhenting.

Feltene:

Felt Hva det angir
Hver Intervallet mellom sonderingene: 1, 2, 3, 5, 10, 15, 20 eller 30 minutter.
Fra / Til Klokkeslettene da vinduet åpner og lukker, i den valgte sonen.
Dager Ukedagene vinduet finnes på (de samme sju knappene og snarveiene).
Hvis et skript feiler, stopp resten av dagen Slått på lukker en feil vinduet til dagen etter, i stedet for å fortsette å prøve.

Uten mer enn dette kjører vinduet skriptet ved det første tikket hver dag og lukker til dagen etter. Den virkelige kraften ligger i valideringen:

Valideringsskriptet

Seksjonen Valideringsskript tar imot litt Python-kode som ved hver sondering avgjør om det alt går an å kjøre:

  1. Klikk på Legg til validering. En editor åpnes i en modal.
  2. Skriv en funksjon main(input) som returnerer True (klar — hovedskriptet kjører én gang og vinduet lukker til i morgen) eller False (ikke ennå — den venter og prøver igjen ved neste intervall).
  3. Bruk Test valideringen for å kjøre den med én gang, med argumentene til tidsplanen: du ser dommen (Kan kjøre (kjører 1×) eller Ikke ennå — venter), varigheten og loggene.
  4. Lukk modalen og klikk på Lagre i editoren til tidsplanen.
# Returnerer True når dagens fil har kommet fram til den interne FTP-en.
from api_manager import db


def main(input):
    linha = db("Dados CRM").query_one(
        "select count(*) as n from cargas_diarias where dia = date('now')"
    )
    return bool(linha and linha["n"] > 0)

Valideringen kjører i samme miljø som hovedskriptet: den får den samme input (argumenter og kontekst), og har de samme filene, det samme Python-miljøet og den samme SDK-en (db, http, log, …).

Dica

Å ha kode er å bruke valideringen — det finnes ingen bryter. For å slutte å validere klikker du på × (Fjern valideringen): koden slettes når du lagrer, og hovedskriptet kjører igjen ved det første tikket i vinduet.

Argumenter til tidsplanen

Seksjonen Argumenter angir navn/verdi-par som når skriptet i input["args"] ved alle kjøringer av denne tidsplanen — akkurat som ved manuell kjøring kommer verdiene som tekst. Det er slik det samme skriptet tjener to ulike tidsplaner: en daglig exportar med {"ambito": "dia"} og en månedlig med {"ambito": "mes"}, for eksempel.

Lagre, aktivere, følge med

  • Lagre oppretter (eller oppdaterer) tidsplanen. Knappen blir først aktiv når navnet er fylt ut og klokkeslettet er gyldig.
  • Bryteren Aktiv øverst slår på og av uten å slette noe — i treet viser en avslått tidsplan (deaktivert).
  • En aktiv tidsplan på et skript i Utkast kjører ikke: tilfellene blir stående som Hoppet over, med merknaden «Skriptet er et utkast».

Panelet Kjøringer

Etter at den er lagret, viser høyresiden av editoren panelet Kjøringer — tidsplanen sett utenfra, oppdatert direkte:

  • Den første linjen sier om planleggingsmotoren i installasjonen er i live («Planleggeren er aktiv · siste sjekk for N s siden»). Hvis den ikke kjører, dukker en tydelig advarsel opp — de planlagte klokkeslettene finnes, men ingen kommer til å innfri dem før planleggeren starter. Snakk da med den som administrerer installasjonen.
  • Under den kommer listen over tilfeller — hvert avtalt klokkeslett og statusen til det:
Status Betyr
Gjenstår Et klokkeslett i framtiden, ennå ikke innfridd.
Kjører Kjøringen pågår akkurat nå.
Utført Den kjørte.
Tapt Den uteble, og retningslinjen er Ignorer (eller den var ikke lenger mulig å hente inn). Grunnen står på linjen.
Hoppet over Den kom aldri i gang — f.eks. skript som utkast, eller overlapp med den forrige kjøringen.

I en tidsplan med validering åpner et klikk på et tilfelle Forsøk på validering: hver sondering med dommen (klar, ikke ennå eller feil) og meldingen. Rekkene av «ikke ennå» vises sammenslått — «12 forsøk uten noe nytt» — så de tre linjene som betyr noe ikke drukner i mengden.

Panelet Kjøringer for tidsplanen: i denne installasjonen står planleggeren stille, og derfor finnes det ingen planlagte tilfeller.
Panelet Kjøringer for tidsplanen: i denne installasjonen står planleggeren stille, og derfor finnes det ingen planlagte tilfeller.

Vanlige spørsmål

Jeg satte den til den 31., og i noen måneder kjører den ikke. Det er oppførselen til På en fast dag: i måneder uten den dagen kjører den ikke — editoren sier fra når du velger 29, 30 eller 31. For «slutten av måneden» bruker du På den siste dagen i måneden.

Kjøringen kl. 09.00 kom opp som Hoppet over (overlapp). Den forrige kjøringen pågikk fortsatt da det nye klokkeslettet kom. Plattformen kjører aldri den samme tidsplanen to ganger samtidig. Skjer det ofte, utvider du intervallet eller reduserer arbeidet per kjøring.

Valideringen returnerte True, men hovedskriptet kjørte bare én gang — betingelsen er fortsatt sann. Det er med vilje: når valideringen returnerer True, kjører hovedskriptet én gang og vinduet lukker til dagen etter. Uten det ville en betingelse som ble stående sann sette skriptet til å kjøre i løkke ut vinduet.

Klokka er stilt om (sommer-/vintertid) — må jeg justere tidsplanene? Nei. Klokkeslettene tolkes i Tidssonen til tidsplanen; omstillingen håndteres av plattformen.