Sådan bruges på og batch på Linux for at planlægge kommandoer

Hvis du vil planlægge et Linux-job, der kun vil ske én gang, er cron overkill. At-familien af ​​kommandoer er, hvad du har brug for! Og hvis du kun vil køre processer, når dit system har ledige ressourcer, kan du bruge batch.

Sådan planlægger du Linux-job

Cron-dæmonen fastholder en liste over job, den kører på bestemte tidspunkter. Disse opgaver og programmer kører i baggrunden på de planlagte tidspunkter. Dette giver dig stor fleksibilitet til at planlægge opgaver, der skal gentages. Uanset om du skal køre en opgave en gang i timen, på et bestemt tidspunkt hver dag eller en gang om måneden eller året, kan du konfigurere den i cron.

Dette hjælper dog ikke, hvis du vil planlægge, at en opgave kun skal køre én gang. Selvfølgelig kan du sætte det op i cron, men så skal du huske at gå tilbage og fjerne crontab-indgang efter at opgaven er udført, hvilket er ubelejligt.

Med Linux, hvis du kæmper med et problem, er det næsten en garanti for, at en anden også har kæmpet med det. Heldigvis, fordi Unix-lignende operativsystemer har eksisteret så længe, ​​er der også en fremragende chance for, at nogen har lavet en løsning på dit problem.

For det ovenfor skitserede problem har de, og det kaldes kl.

Installation af at Command

Vi skulle installere på Ubuntu 18.04 og Manjaro 18.1.0 (det var allerede installeret på Fedora 31).

For at installere på Ubuntu skal du bruge denne kommando:

sudo apt-get install at

Det

Når installationen er fuldført, kan du starte at-dæmonen med denne kommando:

sudo systemctl enable --now atd.service

Det

På Manjaro installerer du på med denne kommando:

sudo pacman -Sy at

Det

Når installationen er fuldført, skriv denne kommando for at starte at-dæmonen:

sudo systemctl enable --now atd.service

Det

På enhver distribution kan du skrive denne kommando for at sikre, at atd-dæmonen kører:

ps -e | grep atd

Det

Sådan bruger du at-kommandoen interaktivt

For at bruge på, skal du tildele den en dato og et klokkeslæt for at køre. Der er stor fleksibilitet i den måde, du kan skrive disse på, hvilket vi kommer ind på senere i denne artikel.

Men selvom vi kommer til at bruge på interaktivt, skal du angive dato og klokkeslæt på forhånd. Hvis du ikke inkluderer noget på kommandolinjen, eller du skriver noget, der ikke er en dato og et klokkeslæt, svarer kl med “Garbled time”, som vist nedenfor:

at
at banana

En forkert brug af

Datoer og tidspunkter kan være eksplicitte eller relative. Lad os f.eks. sige, at du vil have en kommando til at udføre et minut fra nu. at ved, hvad “nu” betyder, så du kan bruge nu og tilføje et minut til det, sådan:

at now + 1 minute

Det

at udskriver en besked og en ved prompt og venter på, at du skriver de kommandoer, du vil planlægge. Overvej dog først meddelelsen, som vist nedenfor:

  Sådan bruges BleachBit på Linux

Det

Den fortæller dig ved lancering af en forekomst af sh-skallen og vilje kør kommandoerne inde i det. Dine kommandoer vil ikke blive udført i Bash-skallen, som er kompatibel med sh-skallen, men har et rigere funktionssæt.

Hvis dine kommandoer eller scripts forsøger at bruge en funktion eller facilitet, som Bash tilbyder, men det gør sh ikke, vil de mislykkes.

Det er nemt at teste, om dine kommandoer eller scripts kører i sh. Brug sh-kommandoen til at starte en sh-skal:

sh

Det

Kommandoprompten ændres til et dollartegn ($), og du kan nu køre dine kommandoer og kontrollere, at de fungerer korrekt.

For at vende tilbage til Bash-skallen skal du skrive exit-kommandoen:

exit

Du vil ikke se nogen standardoutput eller fejlmeddelelser fra kommandoerne. Dette skyldes, at sh-skallen starter som en baggrundsopgave og kører uden nogen form for skærmgrænseflade.

Ethvert output fra kommandoerne – godt eller dårligt – sendes til dig via e-mail. Det sendes via det interne mailsystem til den, der kører at-kommandoen. Det betyder, at du skal konfigurere og konfigurere det interne e-mail-system.

Mange (de fleste) Linux-systemer har ikke et internt e-mail-system, da der sjældent er behov for et. Dem, der typisk bruger et system som Send mail eller postfix. Hvis dit system ikke har et internt e-mail-system, kan du få scripts til at skrive til filer eller omdirigere output til filer for at tilføje logning.

Hvis kommandoen ikke genererer nogen standardoutput eller fejlmeddelelser, vil du alligevel ikke modtage en e-mail. Mange Linux-kommandoer indikerer succes via stilhed, så i de fleste tilfælde vil du ikke modtage en e-mail.

Nu er det tid til at skrive en kommando i kl. Til dette eksempel bruger vi en lille scriptfil kaldet sweep.sh, der sletter *.bak-, *.tmp- og *.o-filerne. Indtast stien til kommandoen, som vist nedenfor, og tryk derefter på Enter.

Det

En anden kommandoprompt vises, og du kan tilføje så mange kommandoer, som du vil. Det er normalt mere praktisk at have dine kommandoer i et enkelt script og blot kalde det script indefra kl.

Tryk på Ctrl+D for at fortælle, når du er færdig med at tilføje kommandoer. ved udstillinger , hvilket betyder slutningen af ​​transmissionen. Du får at vide jobnummeret og hvornår jobbet er planlagt til at køre, som vist nedenfor:

Bekræftelse af

Når jobbet er udført, skal du skrive følgende for at tjekke din interne mail:

mail

Det

Hvis der ikke er nogen mail, må du antage succes. Selvfølgelig kan du i dette tilfælde kontrollere og se, om *.bak-, *.tmp- og *.o-filerne blev slettet for at bekræfte, at kommandoen virkede.

Skriv følgende for at køre det hele igen:

at now + 1 minute

Det

Efter et minut skal du indtaste følgende for at tjekke din mail igen:

mail

Det

Hej, vi har mail! For at læse besked nummer et skal du trykke på 1 og derefter trykke på Enter.

Vi modtog en e-mail fra at, fordi kommandoerne i scriptet genererede fejlmeddelelser. I dette eksempel var der ingen filer at slette, fordi da vi kørte scriptet tidligere, fjernede det dem.

Tryk på D+Enter for at slette e-mailen og Q+Enter for at afslutte e-mailprogrammet.

  Sådan installeres Zettlr markdown-editoren på Linux

Dato- og tidsformater

Du har stor fleksibilitet, når det kommer til de tidsformater, du kan bruge med kl. Her er et par eksempler:

Løb kl 11:00:

at 11:00 AM

Løb klokken 11:00 i morgen:

at 11:00 AM tomorrow

Løb klokken 11:00 på denne dag i næste uge:

at 11:00 AM next week

Kør på dette tidspunkt, på denne dag, næste uge:

at next week

Løb klokken 11:00 næste fredag:

at 11:00 AM next fri

Løb på dette tidspunkt næste fredag:

at next fri

Kør klokken 11:00 på denne dato, næste måned:

at 11:00 AM next month

Kør klokken 11:00 på en bestemt dato:

at 11:00 AM 3/15/2020

Kør 30 minutter fra nu:

at now + 30 minutes

Kør to timer fra nu:

at now + 2 hours

Løb på dette tidspunkt i morgen:

at tomorrow

Løb på dette tidspunkt torsdag:

at thursday

Løb kl 12:00:

at midnight

Løb kl 12:00:

at noon

Hvis du er en brite, kan du endda planlægge en kommando til at køre ved tetid (16:00):

at teatime

Ser på jobkøen

Du kan skrive kommandoen atq for at se køen af ​​planlagte job, som vist nedenfor.

Output fra

For hver kommando i køen viser atq følgende information:

Job ID
Planlagt dato
Planlagt tid
Kø jobbet er i. Køerne er mærket “a”, “b” og så videre. Normale opgaver, du planlægger med ved at gå i kø “a”, mens opgaver, du planlægger med batch (dækket senere i denne artikel) går i kø “b.”
Den person, der har planlagt jobbet.

Bruger på på kommandolinjen

Du behøver ikke bruge på interaktivt; du kan også bruge det på kommandoen. Dette gør det nemmere at bruge inde i scripts.

Du kan overføre kommandoer til på, sådan her:

echo "sh ~/sweep.sh" | at 08:45 AM

An

Jobbet accepteres og planlægges senest kl, og jobnummer og udførelsesdato indberettes ligesom hidtil.

Brug på med kommandofiler

Du kan også gemme en sekvens af kommandoer i en fil og derefter videregive den til kl. Dette kan være en almindelig tekstfil med kommandoer – det behøver ikke at være et eksekverbart script.

Du kan bruge indstillingen -f (fil) på følgende måde til at videregive et filnavn til på:

at now + 5 minutes -f clean.txt

An

Du kan opnå det 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

Sådan ser du en detaljeret visning af job

Som vi nævnte tidligere, kan du planlægge job langt ud i fremtiden. Nogle gange glemmer du måske, hvad et job kommer til at gøre. Atq-kommandoen viser dig jobs i køen, men ikke hvad de vil gøre. Hvis du vil se en detaljeret visning af et job, kan du bruge muligheden -c (cat).

Først bruger vi atq til at finde jobnummeret:

atq

Output fra

Nu vil vi bruge job nummer 13 med muligheden -c:

at -c 13

Det

Her er en oversigt over de oplysninger, vi får tilbage om jobbet:

Første linje: Dette fortæller os, at kommandoerne kører under sh-skallen.
Anden linje: Vi ser, at kommandoerne vil køre med både et bruger- og gruppe-id på 1000. Dette er værdierne for den person, der kørte at-kommandoen.
Tredje linje: Den person, der modtager nogen e-mails, deltager.
Fjerde linje: Den Brugermaske er 22. Dette er masken, der bruges til at indstille standardtilladelserne for alle filer, der er oprettet i denne sh-session. Masken trækkes fra 666, hvilket giver os 644 (den oktale ækvivalent af rw-r--r--).
Resterende data: Størstedelen er miljøvariabler.

Output fra

Resultater af en test. En test kontrollerer, at der er adgang til udførelsesbiblioteket. Hvis det ikke er muligt, opstår der en fejl, og opgaveudførelsen opgives.
De kommandoer, der skal udføres. Disse vises, og indholdet af de scripts, der er planlagt, vises. Bemærk, at selvom scriptet i vores eksempel ovenfor blev skrevet til at køre under Bash, vil det stadig blive udført i en sh-skal.

Batch-kommandoen

Batch-kommandoen fungerer på samme måde til at kommandoen, men med tre væsentlige forskelle:

Du kan kun bruge batch-kommandoen interaktivt.
I stedet for at planlægge job, der skal udføres på et bestemt tidspunkt, føjer du dem til køen, og batch-kommandoen udfører dem, når systemets gennemsnitlige belastning er lavere end 1,5.
På grund af ovenstående angiver du aldrig en dato og tid med batch-kommandoen.

Når du bruger batch-kommandoen, kalder du den ved navn uden kommandolinjeparametre som sådan:

batch

Det

Tilføj derefter opgaver, ligesom du ville med kommandoen at.

Styring af adgang til at kommandoen

Filerne at.allow og at.deny styrer, hvem der kan bruge at-familien af ​​kommandoer. Disse er placeret i mappen /etc. Som standard eksisterer kun filen at.deny, og den oprettes, når at er installeret.

Sådan fungerer disse:

at.deny: Viser applikationer og enheder, der ikke kan bruge på til at planlægge job.
at.allow: Viser, hvem der kan bruge på til at planlægge job. Hvis filen at.allow ikke eksisterer, bruger at kun filen at.deny.

Som standard kan alle bruge kl. Hvis du vil begrænse, hvem der kan bruge det, skal du bruge filen at.allow til at liste dem, der kan. Dette er nemmere end at tilføje alle, der ikke kan bruge at, til at.deny-filen.

Sådan ser at.deny-filen ud:

sudo less /etc/at.deny

Det

Filen viser komponenter i operativsystemet, som ikke kan bruges på. Mange af disse er forhindret i at gøre det af sikkerhedsmæssige årsager, så du ønsker ikke at fjerne nogen fra filen.

Nu vil vi redigere at.allow-filen. Vi kommer til at tilføje dave og mary, men ingen andre får lov til at bruge kl.

Først skriver vi følgende:

sudo gedit /etc/at.allow

Det

I editoren tilføjer vi de to navne, som vist nedenfor, og gemmer derefter filen.

Hvis nogen andre forsøger at bruge på, får han at vide, at han ikke har tilladelse. Lad os f.eks. sige, at en bruger ved navn eric skriver følgende:

at

Han ville blive afvist, som vist nedenfor.

Igen er eric ikke i filen at.deny. Så snart du sætter nogen i at.allow-filen, nægtes alle andre tilladelse til at bruge kl.

Fantastisk til enkeltstående

Som du kan se, er både at og batch ideelle til opgaver, du kun behøver at køre én gang. Igen, som en hurtig gennemgang:

Når du har brug for at gøre noget, der ikke er en almindelig proces, planlæg det med kl.
Hvis du kun vil køre en opgave, når systembelastningen er lav nok, skal du bruge batch.