Her er Danmarks fem bedste CIO’er lige nu:Se de fem nominerede til prisen som Årets CIO 2024

Artikel top billede

(Foto: Computerworld)

Planlæg opgaver, så de bliver kørt automatisk

Vil du sikre dig, at visse opgaver bliver løst på et bestemt tidspunkt eller i rækkefølge? Brug Open Source Job Scheduler til at afvikle dem automatisk.

Af Redaktionen, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Hvad sker der, hvis du har brug for at planlægge løsningen af en opgave, så den sker automatisk, for eksempel efter at en bestemt tjeneste er afviklet?

Der findes adskillige kommercielle planlægningsapplikationer, men de er dyre. Og hvis du blot har brug for automatisk at starte din musikafspiller, når du har føjet nye sange til din musikmappe, er disse løsninger ikke blot dyre – de er rent overkill.

Cron har længe været svaret på planlægning af opgaver i Linux. Dette værktøj er ideelt til planlægningsopgaver såsom at tage backup med regelmæssige mellemrum.

Men selv om Cron unægtelig er et nyttigt program, har det sine begrænsninger. Hvis den opgave, du planlægger, er kompleks – den skal for eksempel afvikles, efter at en bestemt begivenhed er indtrådt – eller hvis du vil køre en række opgaver i en præcis rækkefølge, er du nødt til at lave et wrapper-script til den.

Hvis du søger et program, der kan klare disse ting, men som stadig er gratis, skal du have fat i Open Source Job Scheduler (OSJS), der kan hentes på http://jobscheduler.sourceforge.net. OSJS er en professionel planlægningsapplikation, som du kan styre via dens webbrugerflade. Den understøtter adskillige databaser, herunder MySQL, DB2, OracleDB og PostgreSQL.

Foruden evnen til at planlægge opgaver på tværs af maskiner har OSJS en vigtig komponent, der hedder Hot Folders. Det er mapper, som programmet overvåger for at se, om der er ændringer.

Du kan planlægge opgaver ved hjælp af den Javabaserede Job Scheduler Editor eller ved direkte at redigere xml-filer. Den browserbaserede Job Scheduler-brugerflade bliver brugt til at styre, overvåge og kontrollere opgaver.

Forbered installationen

1 Den altafgørende MySQL JDBC-driver følger ikke med programmet, så den skal du først hente. Denne driver bliver brugt til at koble programmet til MySQL-databasen og kan gratis downloades på MySQL’s website: www.mysql.com/products/connector. Hent blot den 3,5MB store tarball og pak filen »mysql-connector-java-5.1.10-bin.jar« ud af den.

Den næste vigtige del består i at hente Sun JRE. Fyr op under din distributions pakkemanager og led efter sun-java6-jre. Nogle distributioner kan stadig indeholde den ældre version sun-java5-jre, og den kan også bruges.

Brug din pakkemanager til at installere JRE og sørg for, at det er standarden for Java-runtime. Nogle distributioner installerer som standard GCJ-runtimen, men den duer ikke sammen med OSJS.

Åbn runtimen ved at skrive sudo update-alternatives --config java. Nu kan du se de Java-runtimes, der er installeret på din maskine. Vælg den, der hedder »Sun JRE« og bekræft valget ved at skrive java –version.

Installer OSJS

2 Når det nødvendige er på plads, skal du uddrage OSJS-tarball’en og starte Java-installationsprogrammet ved at skrive java –jar scheduler_linux32.jar. Setup-processen begynder med valg af sprog.

Dernæst skal du acceptere licensbetingelserne og angive den mappe, du vil bruge til installationen, før du vælger de pakker, der skal installeres. Foruden Job Scheduler-pakken er der opdateringstjenesten (der søger efter en ny OSJS-version), databasesupport-pakken (der kobler OSJS til en database) eksempler på opgavepakker og forskelligt andet.

Hvis du har valgt databasesupport-pakken, beder installationsprogrammet om forbindelsesoplysninger for MySQL-serveren. Den beder også om MySQL-connectoren og forlanger oplysninger om den database, der skal bruges af OSJS. Husk at oprette databasen på forhånd, så installationen kan foregå med et minimum af afbrydelser.

Når du har valgt de pakker, du kan tænke dig, bliver de nødvendige filer kopieret til installationsmappen. Når det er sket, blevet de scripts, der konfigurerer installationspakkerne, eksekveret.

Under installationen kan du skrive navn på vært og port for programmets webbrugerflade. De standardværdier, du skal skrive, er localhost og port 4444. Hvis du har en anden tjeneste kørende på den port, skal du vælge en anden port til OSJS, ellers skal du holde dig til standardværdien.

Job Scheduler bliver betjent som en dæmon. Brug dette script til at starte og stoppe den:

SHOME/scheduler/bin/jobscheduler.sh start

SHOME/scheduler/bin/jobscheduler.sh stop

Foruden start- og stopkommandoer accepterer dette script øvrige parametre såsom debug, restart, abort og kill.

Hvis du vil have Job Scheduler til at starte automatisk, når serveren starter, skal du kopiere dette script til mappen /etc/init.d services.

Tilføj en opgave

3 Lad os antage, at du har et backup-script, der laver backup af din downloadmappe. Med din jobeditor kan du planlægge dette backup-script, så det kører automatisk med regelmæssige intervaller, for eksempel en gang om dagen.

Første skridt, når en opgave skal skabes, er at starte den grafiske jobeditor. Det gør du ved at eksekvere dette script:

./$HOME/scheduler/bin/jobeditor.sh

Efter at du har startet jobeditoren, vælger du »File | New | Hot Folder Element | Job«. Her kan du skrive grundlæggende oplysninger om opgaven, for eksempel dens navn og en beskrivelse,

I Execute-sektionen vælger du knappen »Run Executable«, idet vi bruger et script til at gøre backuppen færdig. På dette trin skal du skrive den komplette sti til dit backup-script.

Sørg for, at du kender den på forhånd. Der er også et felt, hvor du kan skrive andre parametre, der er defineret i scriptet, for eksempel hvis du har valgt at komprimere backupperne, efter at de blevet taget.

Hvis du ikke har et script, lader Job Editor dig bruge et af de understøttede programmeringssprog. Det gør du ved at gå til knappen Script og vælge imellem Java, Com, JavaScript, PerScript, VBScript og Shell.

Dernæst skal du angive de klassenavne, der skal inkluderes. Tilføj det korrekte filnavn og skriv din kildekode direkte ind i det felt, der kommer frem. Det sparer dig for at skulle gemme endnu et eksternt script.

Når du har oprettet opgaven, skal den planlægges. Det første trin i den proces er at vælge funktionen »Runtime« i spalten til venstre. Du kan udvide funktionen og planlægge opgaven for forskellige perioder.

Da vi vil køre opgaven daglig, vælger vi funktionen »Everyday« og angiver en starttid, hvor det er sandsynligt, at computeren er tændt.

Når du har skrevet opgavens detaljer, skal du gemme den ved hjælp af den normale »File | Save«-funktion. Nu bliver du bedt om et filnavn og en mappe, den skal gemmes under. Sørg for, at du gemmer filen under mappen $HOME/scheduler/config/live.

Nu føjer programmet automatisk efternavnet ».xml« til dit filnavn, der kan være hvad som helst – men det er en god ide at vælge noget, der er nemt at genkende.

Overvåg opgaven

4 Når du skal overvåge opgaven, skal du koble dig til webbrugerfladen på localhost:4444 fra din webbrowser. Når du har forbindelse, burde du kunne se din opgave anført under knappen Job. Hvis den ikke er der, skal du klikke på knappen »Update« øverst på siden.

Nu, du er der, kan du klikke på den funktion, der opdaterer listen over opgaver, herunder dem i din Hot Folder, hvert femte sekund.

Hvis du vil se oplysninger om en opgave, skal du dobbeltklikke på den. Nu bliver brugerfladen delt i to med opgavens oplysninger til højre. Klik på Jobmenuen (til højre) for at finde den funktion, der gør det muligt at opgaven med det samme.

Når du har kørt opgaven, kan du klikke på knappen »Show log« under Task History og se resultatet af dens eksekvering. Det er nyttigt, hvis du leder efter debugging-fejl.

Hvis du har planlagt flere opgaver, kan du tjekke op på nylig afviklede opgaver med knappen Last Activities. Da listen i denne sektion kan være meget lang og svær at browse igennem, kan du begrænse de viste aktiviteter ved at vælge forskellige muligheder, for eksempel at du kun får vist opgaver, der slår fejl. Du kan også få vist en log over hver enkelt opgave, hvis du vil se alt, hvad der foregår.

Opret en opgavekæde

5 Foreløbig har vi kun set på, hvordan du tilføjer en enkelt opgave. Lad os nu finde ud af, hvordan du opretter en kæde af opgaver, hvor en opgave først bliver udløst, når den forrige er blevet afviklet. Det er ved denne form for serieafvikling, at OSJS er bedre end Cron.

Vi antager, at du foruden backup-scriptet har et script, der tager backup af konfigurations- og databasefiler for din webserver.

Vi bruger OSJS til at oprette en opgavekæde, der først kører backup-scriptet og derefter backup-scriptet til webserveren, når det er sket. En opgavekæde kan kun samle eksisterende opgaver. Sørg derfor for, at begge opgaver på forhånd er blevet defineret med Job Editor.

Når du skal oprette en opgavekæde, starter du Job Editor og går til »File | New | Hot Folder Element | Job Chain«. Igen består det første trin i at give kæden et navn og en kort beskrivelse.

Hvert element i en kæde bliver kaldt en »node«. Når du skal oprette en ny node, klikker du på »Nodes« på knappen »New Chain Node« til højre.

Skriv nu stien til den første opgave i kæden i feltet »Job«. Du kan også bruge knappen »Browse« til at lede efter opgaven. I feltet »Start« kan du definere en tilstand til denne node, men det er kun nyttigt i forbindelse med komplekse opgavekæder. Du kan for eksempel definere en Error-tilstand.

Når der opstår en fejl, springer opgavekæden alle opgaverne over og går direkte til den, der er defineret i Error-tilstanden. Efter at du har fundet den opgave, du vil tilføje, skal du klikke på »Apply Chain Node«.

Gentag nu processen for at tilføje den anden opgave, der tager backup af website-filerne. Til sidst skal du gemme opgavekæden i Live-mappen.

I den webbaserede brugerflade klikker du på knappen Job Chains. Her bør du kunne se din kæde. Klik i boksen »Show Jobs« for at se de enkelte opgaver i din kæde. Dobbeltklik på kæden, og den bliver delt op i to. Oplysningerne om kæden kommer frem til højre.

I denne guide har vi startet det hele mere eller mindre manuelt. Vi skal definere den rækkefølge, hvori opgavekæden skal startes. Denne rækkefølge bør vi kunne oprette dynamisk. Til det formål kan vi oprette en rækkefølge på et specifikt tidspunkt, der udløser kæden.

Det gør man ved at gå tilbage til Job Editor og gå til »File | New | Hot Folder | Order«. Begynd som sædvanlig med at skrive et navn til rækkefølgen. Vælg derefter den specifikke opgavekæde, som du vil knytte til denne rækkefølge. Husk, at en rækkefølge kun kan knyttes til en enkelt kæde. Lad være med at prøve med flere kæder.

Klik nu på funktionen »Runtime« og definer en ny periode for at afvikle den rækkefølge, du ønsker. Det kan være dagligt på et bestemt tidspunkt. For med det samme at aktivere ændringerne skal du gemme rækkefølgen under mappen config/live.

Når du nu går tilbage til den webbaserede brugerflade, vil du se den rækkefølge, der er knyttet til opgavekæden, angivet under knappen Order. Under rækkefølgen viser »Next Start« dato og tidspunkt for den næste afvikling af rækkefølgen på dit system.

Planlægningsfunktionerne i OSJS er ret komplekse. Applikationen giver forskellige muligheder for at definere tidsintervallerne for opgaver, kæder og rækkefølger.

Den indlysende metode består i at angive et specifikt starttidspunkt. OSJS rummer mulighed for at vælge et bestemt tidspunkt såsom kl. 9.20 eller et interval såsom 48 timer. Opgaver i en kæde behøver ikke faste tidspunkter, men man har den samme fleksibilitet, når man opretter en rækkefølge for opgavekædens afvikling.

En anden metode er at definere et specifikt tidsrum for opgavens start. For eksempel bør processorintensive opgaver såsom database- eller systembackup finde sted efter kl. 22, også hvis opgaven er del af en opgavekæde, der begynder med at tage backup af downloadede filer meget tidligere, kl. 18.

Foruden at køre opgaver på bestemte tidspunkter kan man også planlægge opgaver, så de bliver kørt på bestemte ugedage eller den første torsdag i måneden. Man kan også vælge faste datoer uden gentagelser, for eksempel 10. maj.

[themepacific_accordion]
[themepacific_accordion_section title="Fakta"]

Det skal du bruge…

[/themepacific_accordion_section]
[/themepacific_accordion]