Hvordan bruke på og batch på Linux for å planlegge kommandoer

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.

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

De

Etter at installasjonen er fullført, kan du starte at daemon med denne kommandoen:

sudo systemctl enable --now atd.service

De

På Manjaro installerer du på med denne kommandoen:

sudo pacman -Sy at

De

Etter at installasjonen er fullført, skriv inn denne kommandoen for å starte at daemon:

sudo systemctl enable --now atd.service

De

På enhver distribusjon kan du skrive inn denne kommandoen for å sikre at atd-demonen kjører:

ps -e | grep atd

De

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

En feil bruk av

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

De

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:

  Hvordan spille GreedFall på Linux

De

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

De

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.

De

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 som betyr slutten av overføringen. Du får beskjed om jobbnummeret og når jobben er planlagt å kjøre, som vist nedenfor:

Bekreftelse av

Etter at jobben er utført, skriv inn følgende for å sjekke intern e-post:

mail

De

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

De

Etter ett minutt skriver du inn følgende for å sjekke e-posten din på nytt:

mail

De

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.

  Hvordan brenne en ISO-fil til en USB-stasjon i Linux

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.

Utgang fra

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

An

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

An

Du kan oppnå samme resultat hvis du omdirigerer filen til på:

at now + 5 minutes 

An

Removing 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:

atq
atrm 11
atq

Hvordan 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:

atq

Utgang fra

Nå bruker vi jobb nummer 13 med alternativet -c:

at -c 13

De

Her 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.

Utgang fra

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:

batch

De

Deretter 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.deny

De

Filen 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.allow

De

I 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:

at

Han 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.