Hvis du vil planlegge en Linux-jobb som bare vil skje én gang, er cron overkill. At-familien av kommandoer er det du trenger! Og hvis du bare vil kjøre prosesser når systemet har ledige ressurser, kan du bruke batch.
Innholdsfortegnelse
Hvordan planlegge Linux-jobber
Cron-demonen opprettholder en liste over jobber den kjører til bestemte tider. Disse oppgavene og programmene kjører i bakgrunnen til de planlagte tidspunktene. Dette gir deg stor fleksibilitet for å planlegge oppgaver som må gjentas. Enten du trenger å kjøre en oppgave en gang i timen, på et bestemt tidspunkt hver dag, eller en gang i måneden eller året, kan du sette den opp i cron.
Dette hjelper imidlertid ikke hvis du vil planlegge en oppgave som skal kjøres bare én gang. Jada, du kan sette den opp i cron, men da må du huske å gå tilbake og fjerne crontab-oppføring etter at oppgaven er utført, noe som er upraktisk.
Med Linux, hvis du sliter med et problem, er det nesten en garanti for at noen andre også har slitt med det. Heldigvis, fordi Unix-lignende operativsystemer har eksistert så lenge, er det også en utmerket sjanse for at noen har laget en løsning på problemet ditt.
For problemet skissert ovenfor har de, og det kalles kl.
Installerer at Command
Vi måtte installere på Ubuntu 18.04 og Manjaro 18.1.0 (den var allerede installert på Fedora 31).
For å installere på Ubuntu, bruk denne kommandoen:
sudo apt-get install at
Etter at installasjonen er fullført, kan du starte at daemon med denne kommandoen:
sudo systemctl enable --now atd.service
På Manjaro installerer du på med denne kommandoen:
sudo pacman -Sy at
Etter at installasjonen er fullført, skriv inn denne kommandoen for å starte at daemon:
sudo systemctl enable --now atd.service
På enhver distribusjon kan du skrive inn denne kommandoen for å sikre at atd-demonen kjører:
ps -e | grep atd
Hvordan bruke at-kommandoen interaktivt
For å bruke på, må du tilordne den en dato og klokkeslett for å kjøre. Det er en stor grad av fleksibilitet i måten du kan skrive disse på, som vi dekker senere i denne artikkelen.
Men selv om vi skal bruke på interaktivt, må du oppgi dato og klokkeslett på forhånd. Hvis du ikke tar med noe på kommandolinjen, eller du skriver noe som ikke er en dato og et klokkeslett, svarer klokken med «Garbled time», som vist nedenfor:
at
at banana
Datoer og klokkeslett kan være eksplisitte eller relative. La oss for eksempel si at du vil ha en kommando utført ett minutt fra nå. at vet hva «nå» betyr, så du kan bruke nå og legge til ett minutt til det, slik:
at now + 1 minute
at skriver ut en melding og en ledetekst, og venter på at du skal skrive inn kommandoene du vil planlegge. Tenk først på meldingen, som vist nedenfor:
Den forteller deg ved lansering en forekomst av sh-skallet og vilje kjør kommandoene i den. Kommandoene dine vil ikke bli utført i Bash-skallet, som er kompatibelt med sh-skallet, men har et rikere funksjonssett.
Hvis kommandoene eller skriptene dine prøver å bruke en funksjon eller innretning som Bash tilbyr, men det gjør det ikke, vil de mislykkes.
Det er enkelt å teste om kommandoene eller skriptene dine vil kjøre i sh. Bruk sh-kommandoen for å starte et sh-skall:
sh
Ledeteksten endres til et dollartegn ($), og du kan nå kjøre kommandoene dine og bekrefte at de fungerer som de skal.
For å gå tilbake til Bash-skallet, skriv inn exit-kommandoen:
exit
Du vil ikke se noen standard utdata eller feilmeldinger fra kommandoene. Dette er fordi sh-skallet starter som en bakgrunnsoppgave og kjører uten noen form for skjermgrensesnitt.
Alle utdata fra kommandoene – gode eller dårlige – sendes til deg på e-post. Den sendes via det interne postsystemet til den som kjører at-kommandoen. Dette betyr at du må sette opp og konfigurere det interne e-postsystemet.
Mange (de fleste) Linux-systemer har ikke et internt e-postsystem, da det sjelden er behov for et. De som vanligvis bruker et system som sendmail eller postfix. Hvis systemet ditt ikke har et internt e-postsystem, kan du få skript til å skrive til filer eller omdirigere utdata til filer for å legge til logging.
Hvis kommandoen ikke genererer noen standard utdata eller feilmeldinger, vil du uansett ikke motta en e-post. Mange Linux-kommandoer indikerer suksess via stillhet, så i de fleste tilfeller vil du ikke motta en e-post.
Nå er det på tide å skrive inn en kommando på. For dette eksempelet bruker vi en liten skriptfil kalt sweep.sh som sletter *.bak-, *.tmp- og *.o-filene. Skriv inn banen til kommandoen, som vist nedenfor, og trykk deretter Enter.
En annen ledetekst vises, og du kan legge til så mange kommandoer du vil. Det er vanligvis mer praktisk å ha kommandoene dine i ett enkelt skript og ganske enkelt ringe det skriptet innenfra kl.
Trykk Ctrl+D for å si at du er ferdig med å legge til kommandoer. på utstillinger
Etter at jobben er utført, skriv inn følgende for å sjekke intern e-post:
Hvis det ikke er post, må du anta suksess. Selvfølgelig, i dette tilfellet, kan du sjekke og se om *.bak-, *.tmp- og *.o-filene ble slettet for å bekrefte at kommandoen fungerte.
Skriv inn følgende for å kjøre hele greia på nytt:
at now + 1 minute
Etter ett minutt skriver du inn følgende for å sjekke e-posten din på nytt:
Hei, vi har post! For å lese melding nummer én, trykk 1, og trykk deretter Enter.
Vi mottok en e-post fra at fordi kommandoene i skriptet genererte feilmeldinger. I dette eksemplet var det ingen filer å slette fordi da vi kjørte skriptet tidligere, fjernet det dem.
Trykk D+Enter for å slette e-posten og Q+Enter for å avslutte e-postprogrammet.
Dato- og klokkeslettformater
Du har mye fleksibilitet når det kommer til tidsformatene du kan bruke med kl. Her er noen eksempler:
Løp kl 11:00:
at 11:00 AM
Løp kl 11:00 i morgen:
at 11:00 AM tomorrow
Løp kl 11:00 på denne dagen neste uke:
at 11:00 AM next week
Kjør på dette tidspunktet, på denne dagen, neste uke:
at next week
Løp kl 11:00 neste fredag:
at 11:00 AM next fri
Løp på denne tiden neste fredag:
at next fri
Kjør klokken 11:00 på denne datoen, neste måned:
at 11:00 AM next month
Kjør klokken 11:00 på en bestemt dato:
at 11:00 AM 3/15/2020
Kjør 30 minutter fra nå:
at now + 30 minutes
Kjør to timer fra nå:
at now + 2 hours
Løp på denne tiden i morgen:
at tomorrow
Løp på denne tiden på torsdag:
at thursday
Løp kl 12:00:
at midnight
Løp kl 12:00:
at noon
Hvis du er en brite, kan du til og med planlegge en kommando som skal kjøres ved tetid (16:00):
at teatime
Ser på jobbkøen
Du kan skrive inn atq-kommandoen for å se køen med planlagte jobber, som vist nedenfor.
For hver kommando i køen viser atq følgende informasjon:
Jobb-ID
Planlagt dato
Planlagt tid
Kø jobben er i. Køene er merket «a», «b» og så videre. Vanlige oppgaver du planlegger med ved gå inn i kø «a», mens oppgaver du planlegger med batch (dekket senere i denne artikkelen) går inn i kø «b.»
Personen som planla jobben.
Bruker på på kommandolinjen
Du trenger ikke bruke på interaktivt; du kan også bruke den på kommandoen. Dette gjør det enklere å bruke inne i skript.
Du kan overføre kommandoer til på, slik:
echo "sh ~/sweep.sh" | at 08:45 AM
Jobben er akseptert og planlagt innen kl, og jobbnummer og utførelsesdato rapporteres akkurat som før.
Bruker på med kommandofiler
Du kan også lagre en sekvens av kommandoer i en fil, og deretter sende den til kl. Dette kan være en ren tekstfil med kommandoer – det trenger ikke å være et kjørbart skript.
Du kan bruke alternativet -f (fil) på følgende måte for å sende et filnavn til på:
at now + 5 minutes -f clean.txt
Du kan oppnå samme resultat hvis du omdirigerer filen til på:
at now + 5 minutesRemoving Scheduled Jobs from the Queue
To remove a scheduled job from the queue, you can use the atrm command. If you want to see the queue first to find the number of the job you want to remove, you can use atq . Then, use that job number with atrm, as shown below:
atqatrm 11atqHvordan se en detaljert oversikt over jobber
Som vi nevnte tidligere, kan du planlegge jobber langt inn i fremtiden. Noen ganger kan du glemme hva en jobb kommer til å gjøre. Atq-kommandoen viser deg jobbene i køen, men ikke hva de skal gjøre. Hvis du vil se en detaljert visning av en jobb, kan du bruke alternativet -c (cat).
Først bruker vi atq for å finne jobbnummeret:
atqNå bruker vi jobb nummer 13 med alternativet -c:
at -c 13Her er en oversikt over informasjonen vi får tilbake om jobben:
Første linje: Dette forteller oss at kommandoene vil kjøre under sh-skallet.
Andre linje: Vi ser at kommandoene kjøres med både en bruker- og gruppe-ID på 1000. Dette er verdiene for personen som kjørte at-kommandoen.
Tredje linje: Personen som mottar noen e-postmeldinger deltar.
Fjerde linje: The Brukermaske er 22. Dette er masken som brukes til å angi standardtillatelser for alle filer som er opprettet i denne sh-økten. Masken trekkes fra 666, som gir oss 644 (den oktale ekvivalenten til rw-r--r--).
Gjenværende data: De fleste er miljøvariabler.Resultater av en test. En test sjekker at utførelseskatalogen er tilgjengelig. Hvis den ikke kan det, oppstår en feil, og jobbutførelsen avbrytes.
Kommandoene som skal utføres. Disse er oppført, og innholdet i skriptene som er planlagt vises. Merk at selv om skriptet i eksemplet ovenfor ble skrevet for å kjøre under Bash, vil det fortsatt bli utført i et sh-skall.Batch-kommandoen
Batch-kommandoen fungerer på samme måte til kommandoen, men med tre signifikante forskjeller:
Du kan bare bruke batch-kommandoen interaktivt.
I stedet for å planlegge jobber for å utføre på et bestemt tidspunkt, legger du dem til i køen, og batch-kommandoen utfører dem når systemets gjennomsnittlige belastning er lavere enn 1,5.
På grunn av ovenstående spesifiserer du aldri en dato og tid med batch-kommandoen.Når du bruker batch-kommandoen, kaller du den ved navn uten kommandolinjeparametere som slik:
batchDeretter legger du til oppgaver akkurat som du ville gjort med at-kommandoen.
Kontrollere tilgang til at-kommandoen
At.allow og at.deny-filene kontrollerer hvem som kan bruke at-familien av kommandoer. Disse er plassert i /etc-katalogen. Som standard eksisterer bare at.deny-filen, og den opprettes når at er installert.
Slik fungerer disse:
at.deny: Viser applikasjoner og enheter som ikke kan bruke på til å planlegge jobber.
at.allow: Viser hvem som kan bruke på til å planlegge jobber. Hvis at.allow-filen ikke eksisterer, bruker at bare at.deny-filen.Som standard kan alle bruke kl. Hvis du vil begrense hvem som kan bruke den, bruk at.allow-filen for å liste opp de som kan. Dette er enklere enn å legge til alle som ikke kan bruke at til at.deny-filen.
Slik ser at.deny-filen ut:
sudo less /etc/at.denyFilen viser komponenter i operativsystemet som ikke kan brukes på. Mange av disse er forhindret fra å gjøre det av sikkerhetsgrunner, så du vil ikke fjerne noen fra filen.
Nå skal vi redigere at.allow-filen. Vi skal legge til dave og mary, men ingen andre får bruke kl.
Først skriver vi følgende:
sudo gedit /etc/at.allowI redigeringsprogrammet legger vi til de to navnene, som vist nedenfor, og lagrer deretter filen.
Hvis noen andre prøver å bruke på, får han beskjed om at han ikke har tillatelse. La oss for eksempel si at en bruker ved navn eric skriver følgende:
atHan ville bli nektet, som vist nedenfor.
Igjen, eric er ikke i at.deny-filen. Så snart du legger noen inn i at.allow-filen, nektes alle andre tillatelse til å bruke på.
Flott for engangsbedrifter
Som du kan se, er både at og batch ideelle for oppgaver du bare trenger å kjøre én gang. Igjen, som en rask gjennomgang:
Når du trenger å gjøre noe som ikke er en vanlig prosess, planlegg det med kl.
Hvis du vil kjøre en oppgave bare når systembelastningen er lav nok, bruk batch.