Cum se utilizează la și se lot pe Linux pentru a programa comenzi

Dacă doriți să programați o lucrare Linux care se va întâmpla o singură dată, cron este exagerat. Familia de comenzi at este ceea ce ai nevoie! Și dacă doriți să rulați procese numai atunci când sistemul dvs. are resurse gratuite, puteți utiliza lot.

Cum să programați joburi Linux

Daemonul cron menține o listă de joburi pe care le rulează la anumite momente. Aceste sarcini și programe rulează în fundal la orele programate. Acest lucru vă oferă o mare flexibilitate pentru programarea sarcinilor care trebuie repetate. Indiferent dacă trebuie să rulați o sarcină o dată la oră, la o anumită oră în fiecare zi, sau o dată pe lună sau pe an, o puteți configura în cron.

Cu toate acestea, acest lucru nu ajută dacă doriți să programați o sarcină să ruleze o singură dată. Sigur, îl puteți configura în cron, dar apoi trebuie să vă amintiți să vă întoarceți și să eliminați intrare crontab după ce sarcina se execută, ceea ce este incomod.

Cu Linux, dacă te confrunți cu o problemă, este aproape o garanție că și altcineva s-a luptat cu ea. Din fericire, deoarece sistemele de operare asemănătoare Unix există atât de mult timp, există și o șansă excelentă ca cineva să creeze o soluție la problema ta.

Pentru problema prezentată mai sus, au, și se numește la.

Instalarea at Command

A trebuit să instalăm pe Ubuntu 18.04 și Manjaro 18.1.0 (era deja instalat pe Fedora 31).

Pentru a instala pe Ubuntu, utilizați această comandă:

sudo apt-get install at

The

După finalizarea instalării, puteți porni daemon-ul at cu această comandă:

sudo systemctl enable --now atd.service

The

Pe Manjaro, instalați la cu această comandă:

sudo pacman -Sy at

The

După finalizarea instalării, tastați această comandă pentru a porni demonul at:

sudo systemctl enable --now atd.service

The

Pe orice distribuție, puteți tasta această comandă pentru a vă asigura că daemonul atd rulează:

ps -e | grep atd

The

Cum să utilizați at Command în mod interactiv

Pentru a utiliza la, trebuie să îi atribuiți o dată și o oră pentru a rula. Există o mare flexibilitate în modul în care le puteți scrie, pe care o vom trata mai târziu în acest articol.

Cu toate acestea, chiar dacă vom folosi în mod interactiv, trebuie să furnizați în avans data și ora. Dacă nu includeți nimic în linia de comandă sau introduceți ceva care nu este o dată și o oră, la răspunde cu „Ora deturnată”, după cum se arată mai jos:

at
at banana

O utilizare incorectă a

Datele și orele pot fi explicite sau relative. De exemplu, să presupunem că doriți ca o comandă să fie executată peste un minut. at știe ce înseamnă „acum”, așa că poți folosi acum și adăuga un minut la el, așa:

at now + 1 minute

The

at tipărește un mesaj și un prompt at și așteaptă să tastați comenzile pe care doriți să le programați. Mai întâi, totuși, luați în considerare mesajul, așa cum se arată mai jos:

  Cum se instalează Ring pe Linux

The

Vă spune la lansări o instanță a shell-ului sh și va rulați comenzile din interiorul acestuia. Comenzile tale nu vor fi executate în shell-ul Bash, care este compatibil cu shell-ul sh, dar are un set de caracteristici mai bogat.

Dacă comenzile sau scripturile dvs. încearcă să utilizeze o funcție sau o facilitate pe care o oferă Bash, dar sh nu o face, vor eșua.

Este ușor să testați dacă comenzile sau scripturile dvs. vor rula în sh. Utilizați comanda sh pentru a porni un shell sh:

sh

The

Linia de comandă se schimbă într-un semn dolar ($), iar acum puteți rula comenzile și verifica dacă funcționează corect.

Pentru a reveni la shell-ul Bash, tastați comanda de ieșire:

exit

Nu veți vedea nicio ieșire standard sau mesaje de eroare din comenzi. Acest lucru se datorează faptului că shell-ul sh se lansează ca sarcină de fundal și rulează fără nici un fel de interfață de ecran.

Orice ieșire din comenzi – bună sau rea – vă este trimisă prin e-mail. Este trimis prin sistemul de poștă intern către oricine execută comanda la comandă. Aceasta înseamnă că trebuie să configurați și să configurați acel sistem de e-mail intern.

Multe (majoritatea) sistemelor Linux nu au un sistem de e-mail intern, deoarece rareori este nevoie de unul. Cei care folosesc de obicei un sistem ca sendmail sau postfix. Dacă sistemul dvs. nu are un sistem de e-mail intern, puteți solicita ca scripturile să scrie în fișiere sau să redirecționeze ieșirea către fișiere pentru a adăuga înregistrarea în jurnal.

Dacă comanda nu generează nicio ieșire standard sau mesaje de eroare, oricum nu veți primi un e-mail. Multe comenzi Linux indică succesul prin tăcere, așa că, în majoritatea cazurilor, nu veți primi un e-mail.

Acum, este timpul să tastați o comandă la. Pentru acest exemplu, vom folosi un fișier script mic numit sweep.sh care șterge fișierele *.bak, *.tmp și *.o. Tastați calea către comandă, așa cum se arată mai jos, apoi apăsați Enter.

The

Apare un alt prompt de comandă și puteți adăuga câte comenzi doriți. De obicei, este mai convenabil să aveți comenzile într-un singur script și să apelați pur și simplu acel script din interior la.

Apăsați Ctrl+D pentru a spune că ați terminat de adăugat comenzile. la spectacole , care înseamnă sfârşitul transmisiei. Vi se spune numărul jobului și când este programat să ruleze jobul, după cum se arată mai jos:

Confirmarea

După ce se execută jobul, tastați următoarele pentru a vă verifica poșta internă:

mail

The

Dacă nu există e-mail, trebuie să vă asumați succesul. Desigur, în acest caz, puteți verifica și vedea dacă fișierele *.bak , *.tmp și *.o au fost șterse pentru a confirma că comanda a funcționat.

Tastați următoarele pentru a rula totul din nou:

at now + 1 minute

The

După un minut, tastați următoarele pentru a verifica din nou e-mailul:

mail

The

Hei, avem mail! Pentru a citi mesajul numărul unu, apăsați 1, apoi apăsați Enter.

Am primit un e-mail de la la, deoarece comenzile din script au generat mesaje de eroare. În acest exemplu, nu existau fișiere de șters, deoarece atunci când am rulat scriptul anterior, le-a eliminat.

Apăsați D+Enter pentru a șterge e-mailul și Q+Enter pentru a părăsi programul de e-mail.

Formate de dată și oră

Aveți multă flexibilitate când vine vorba de formatele de timp pe care le puteți utiliza la. Iată câteva exemple:

  Cum se instalează Darktable pe Linux

Alergați la ora 11:00:

at 11:00 AM

Alergați mâine la 11:00:

at 11:00 AM tomorrow

Rulați la ora 11:00 în această zi săptămâna viitoare:

at 11:00 AM next week

Rulați la această oră, în această zi, săptămâna viitoare:

at next week

Alergați la 11:00 vinerea viitoare:

at 11:00 AM next fri

Rulați la această oră vinerea viitoare:

at next fri

Rulați la ora 11:00 la această dată, luna viitoare:

at 11:00 AM next month

Rulați la ora 11:00 la o anumită dată:

at 11:00 AM 3/15/2020

Alergați peste 30 de minute:

at now + 30 minutes

Alergați peste două ore:

at now + 2 hours

Alergați la această oră mâine:

at tomorrow

Rulați la această oră joi:

at thursday

Alergă la ora 12:00:

at midnight

Alergă la ora 12:00:

at noon

Dacă sunteți britanic, puteți chiar să programați o comandă să ruleze la ora ceaiului (16:00):

at teatime

Privind coada de locuri de muncă

Puteți introduce comanda atq pentru a vedea coada de joburi programate, așa cum se arată mai jos.

Ieșire din

Pentru fiecare comandă din coadă, atq afișează următoarele informații:

ID job
Data programată
Ora programată
Cozile în care se află jobul. Cozile sunt etichetate „a”, „b” și așa mai departe. Sarcinile obișnuite cu care le programați la intră în coada „a”, în timp ce sarcinile pe care le programați cu lot (acoperite mai târziu în acest articol) intră în coada „b”.
Persoana care a programat jobul.

Folosind at pe linia de comandă

Nu trebuie să utilizați la interactiv; îl poți folosi și la comandă. Acest lucru face mai ușor de utilizat în interiorul scripturilor.

Puteți introduce comenzi în la, astfel:

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

Un

Lucrarea este acceptată și programată până la ora, iar numărul lucrării și data execuției sunt raportate la fel ca înainte.

Folosind at cu Files of Commands

De asemenea, puteți stoca o secvență de comenzi într-un fișier și apoi o puteți transmite la at. Acesta poate fi un fișier text simplu de comenzi — nu trebuie să fie un script executabil.

Puteți utiliza opțiunea -f (fișier) în felul următor pentru a transmite un nume de fișier la:

at now + 5 minutes -f clean.txt

Un

Puteți obține același rezultat dacă redirecționați fișierul la:

at now + 5 minutes 

Un

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

Cum să vedeți o vizualizare detaliată a locurilor de muncă

După cum am menționat anterior, puteți programa locuri de muncă în viitor. Uneori, s-ar putea să uiți ce va face o slujbă. Comanda atq vă arată joburile din coadă, dar nu ce vor face acestea. Dacă doriți să vedeți o vizualizare detaliată a unui job, puteți utiliza opțiunea -c (cat).

Mai întâi, vom folosi atq pentru a găsi numărul locului de muncă:

atq

Ieșire din

Acum, vom folosi jobul numărul 13 cu opțiunea -c:

at -c 13

The

Iată o detaliere a informațiilor pe care le primim despre job:

Prima linie: Aceasta ne spune că comenzile vor rula sub shell-ul sh.
A doua linie: vedem că comenzile vor rula atât cu un ID de utilizator, cât și cu un ID de grup de 1000. Acestea sunt valorile pentru persoana care a executat comanda at.
A treia linie: persoana care primește orice e-mail la adresa.
A patra linie: The Mască de utilizator este 22. Aceasta este masca folosită pentru a seta permisiunile implicite pentru orice fișiere create în această sesiune sh. Masca se scade din 666, ceea ce ne dă 644 (echivalentul octal al lui rw-r--r--).
Date rămase: majoritatea sunt variabile de mediu.

Ieșire din

Rezultatele unui test. Un test verifică pentru a se asigura că directorul de execuție poate fi accesat. Dacă nu se poate, apare o eroare și execuția jobului este abandonată.
Comenzile de executat. Acestea sunt listate și este afișat conținutul scripturilor care sunt programate. Rețineți că, deși scriptul din exemplul nostru de mai sus a fost scris pentru a rula sub Bash, acesta va fi în continuare executat într-un shell sh.

Comanda batch

Comanda batch operează în mod similar față de cel de la comandă, dar cu trei diferențe semnificative:

Puteți utiliza comanda batch doar interactiv.
În loc să programați joburile pentru a se executa la un moment specific, le adăugați la coadă, iar comanda batch le execută atunci când sarcina medie a sistemului este mai mică de 1,5.
Datorită celor de mai sus, nu specificați niciodată o dată și o oră cu comanda batch.

Când utilizați comanda batch, o numiți pe nume fără parametrii de linie de comandă, astfel:

batch

The

Apoi, adăugați sarcini exact așa cum ați face cu comanda at.

Controlul accesului la la comandă

Fișierele at.allow și at.deny controlează cine poate folosi familia de comenzi at. Acestea sunt localizate în directorul /etc. În mod implicit, există doar fișierul at.deny și este creat atunci când este instalat.

Iată cum funcționează acestea:

at.deny: Listează aplicațiile și entitățile care nu pot utiliza at pentru a programa joburi.
at.allow: listează cine poate folosi at pentru a programa joburi. Dacă fișierul at.allow nu există, at ​​folosește doar fișierul at.deny.

În mod implicit, oricine poate folosi la. Dacă doriți să restricționați cine îl poate folosi, utilizați fișierul at.allow pentru a-i lista pe cei care o pot folosi. Acest lucru este mai ușor decât adăugarea tuturor celor care nu pot folosi at în fișierul at.deny.

Iată cum arată fișierul at.deny:

sudo less /etc/at.deny

The

Fișierul listează componente ale sistemului de operare care nu pot fi utilizate la. Multe dintre acestea sunt împiedicate să facă acest lucru din motive de securitate, așa că nu doriți să eliminați niciunul din fișier.

Acum, vom edita fișierul at.allow. Vom adăuga pe Dave și Mary, dar nimeni altcineva nu va avea voie să folosească.

Mai întâi, introducem următoarele:

sudo gedit /etc/at.allow

The

În editor, adăugăm cele două nume, așa cum se arată mai jos, apoi salvăm fișierul.

Dacă altcineva încearcă să folosească la, i se va spune că nu are permisiunea. De exemplu, să presupunem că un utilizator pe nume eric scrie următoarele:

at

El ar fi refuzat, după cum se arată mai jos.

Din nou, eric nu se află în fișierul at.deny. De îndată ce ați introdus pe oricine în fișierul at.allow, oricui și tuturor celorlalți li se refuză permisiunea de a folosi at.

Excelent pentru One-Off

După cum puteți vedea, atât at cât și batch sunt ideale pentru sarcini pe care trebuie să le rulați o singură dată. Din nou, ca o recenzie rapidă:

Când trebuie să faceți ceva care nu este un proces obișnuit, programați-l cu or.
Dacă doriți să rulați o sarcină numai atunci când încărcarea sistemului este suficient de scăzută, utilizați lot.