A at és kötegelt használata Linuxon a parancsok ütemezéséhez

Ha olyan Linux-feladatot szeretne ütemezni, amely csak egyszer fog megtörténni, a cron túlzás. Az at parancscsalád az, amire szüksége van! És ha csak akkor szeretné futtatni a folyamatokat, ha a rendszerben szabad erőforrások állnak rendelkezésre, használhat kötegelt.

Hogyan ütemezzünk Linux-feladatokat

A cron démon fenntartja meghatározott időpontokban futtatott munkák listája. Ezek a feladatok és programok a háttérben futnak az ütemezett időpontokban. Ez nagy rugalmasságot kínál az ismétlődő feladatok ütemezéséhez. Függetlenül attól, hogy egy feladatot óránként egyszer, minden nap egy adott időpontban, vagy havonta vagy évente egyszer kell futtatnia, a cronban beállíthatja.

Ez azonban nem segít, ha egy feladatot csak egyszeri futtatásra szeretne ütemezni. Természetesen beállíthatja a cronban, de akkor ne felejtse el visszamenni és eltávolítani a crontab bejegyzés a feladat végrehajtása után, ami kényelmetlen.

Linux esetén, ha problémával küzdesz, az szinte garancia arra, hogy valaki más is küzdött vele. Szerencsére, mivel a Unix-szerű operációs rendszerek már régóta léteznek, nagy esély van arra is, hogy valaki megoldást találjon a problémájára.

A fent vázolt problémára megvannak, és ennek neve at.

Az at Command telepítése

Az Ubuntu 18.04-re és a Manjaro 18.1.0-ra kellett telepítenünk (a Fedora 31-re már telepítve volt).

Az Ubuntu webhelyen történő telepítéséhez használja ezt a parancsot:

sudo apt-get install at

A

A telepítés befejezése után elindíthatja az at démont ezzel a paranccsal:

sudo systemctl enable --now atd.service

A

A Manjaro rendszeren a következő paranccsal kell telepíteni:

sudo pacman -Sy at

A

A telepítés befejezése után írja be ezt a parancsot az at démon elindításához:

sudo systemctl enable --now atd.service

A

Bármely disztribúción beírhatja ezt a parancsot, hogy megbizonyosodjon arról, hogy az atd démon fut:

ps -e | grep atd

A

Az at Command interaktív használata

A at használatához hozzá kell rendelnie egy dátumot és időpontot a futtatáshoz. Nagyon rugalmasan írhatja ezeket, amelyekről ebben a cikkben később is kitérünk.

Azonban annak ellenére, hogy interaktívan fogjuk használni a címet, előre meg kell adnia a dátumot és az időt. Ha nem ír be semmit a parancssorba, vagy olyat ír be, ami nem dátum és idő, akkor a „Garbled time”-val válaszol, az alábbiak szerint:

at
at banana

A helytelen használat a

A dátumok és időpontok lehetnek kifejezettek vagy relatívak. Tegyük fel például, hogy egy parancsot szeretne végrehajtani egy perc múlva. Az at tudja, mit jelent a „most”, így használhatja a Most-ot, és adjon hozzá egy percet, például:

at now + 1 minute

A

at kiír egy üzenetet és egy at promptot, és várja, hogy beírja az ütemezni kívánt parancsokat. Először azonban fontolja meg az üzenetet, az alábbiak szerint:

  Hogyan tekinthet meg egy színt a HEX kódból

A

Indításkor elmondja az sh shell és a will egy példányát futtassa a benne lévő parancsokat. A parancsok nem hajtódnak végre a Bash shellben, amely kompatibilis az sh shell-el, de gazdagabb szolgáltatáskészlettel rendelkezik.

Ha a parancsok vagy szkriptek megpróbálnak használni egy Bash által biztosított funkciót vagy szolgáltatást, de az sh nem, akkor kudarcot vallanak.

Könnyen tesztelhető, hogy a parancsok vagy a szkriptek futnak-e sh-ben. Használja az sh parancsot egy sh shell indításához:

sh

A

A parancssor dollárjelre ($) változik, és most már futtathatja a parancsokat, és ellenőrizheti, hogy megfelelően működnek-e.

A Bash parancsértelmezőhöz való visszatéréshez írja be az exit parancsot:

exit

Nem fog látni szabványos kimenetet vagy hibaüzeneteket a parancsokból. Ennek az az oka, hogy az sh shell háttérfeladatként indul el, és mindenféle képernyőfelület nélkül fut.

A parancsok bármely kimenete – jó vagy rossz – e-mailben elküldésre kerül. A belső levelezőrendszeren keresztül küldik el annak, aki az at parancsot futtatja. Ez azt jelenti, hogy be kell állítania és konfigurálnia kell ezt a belső levelezőrendszert.

Sok (a legtöbb) Linux rendszer nem rendelkezik belső levelezőrendszerrel, mivel ritkán van rá szükség. Azok, akik általában olyan rendszert használnak, mint pl levél küldés vagy postfix. Ha a rendszere nem rendelkezik belső levelezőrendszerrel, akkor a naplózás hozzáadásához parancsfájlokat írhat fájlba, vagy átirányíthatja a kimenetet a fájlokra.

Ha a parancs nem generál szabványos kimenetet vagy hibaüzenetet, úgysem fog e-mailt kapni. Sok Linux-parancs csendben jelzi a sikert, így a legtöbb esetben nem kap e-mailt.

Most itt az ideje beírni egy parancsot a at. Ebben a példában egy sweep.sh nevű kis szkriptfájlt használunk, amely törli a *.bak, *.tmp és *.o fájlokat. Írja be a parancs elérési útját az alábbiak szerint, majd nyomja meg az Enter billentyűt.

A

Megjelenik egy másik parancssor, és tetszőleges számú parancsot adhat hozzá. Általában kényelmesebb, ha a parancsokat egyetlen szkriptben tárolja, és egyszerűen meghívja azt a szkriptet belülről a at.

Nyomja le a Ctrl+D billentyűkombinációt, hogy jelezze, hogy befejezte a parancsok hozzáadását. bemutatókon , ami azt jelenti adás vége. Az alábbiak szerint tájékoztatják Önt a munkaszámról és a munka ütemezett futásának időpontjáról:

Megerősítése

A feladat végrehajtása után írja be a következőket a belső levelek ellenőrzéséhez:

mail

A

Ha nincs levél, akkor a sikert kell feltételeznie. Természetesen ebben az esetben ellenőrizheti, hogy a *.bak , *.tmp és *.o fájlokat törölték-e a parancs működésének megerősítése érdekében.

Írja be a következőket, hogy újra lefusson az egész:

at now + 1 minute

A

Egy perc elteltével írja be a következőket a levelek újraellenőrzéséhez:

mail

A

Hé, levél van! Az első számú üzenet elolvasásához nyomja meg az 1-et, majd nyomja meg az Enter billentyűt.

E-mailt kaptunk a(z) címtől, mert a szkriptben lévő parancsok hibaüzeneteket generáltak. Ebben a példában nem volt törölhető fájl, mert amikor korábban futtattuk a szkriptet, az eltávolította őket.

Nyomja meg a D+Enter billentyűt az e-mail törléséhez, a Q+Enter billentyűt pedig a levelezőprogramból való kilépéshez.

  Hogyan adhatunk automatikusan szerepeket a Discordban

Dátum és idő formátumok

Nagy rugalmasság áll rendelkezésedre az at-val használható időformátumok tekintetében. Íme néhány példa:

Futás 11:00 órakor:

at 11:00 AM

Holnap 11:00-kor:

at 11:00 AM tomorrow

Futtatás a jövő héten ezen a napon 11:00-kor:

at 11:00 AM next week

Futás ebben az időben, ezen a napon, a jövő héten:

at next week

Jövő pénteken 11:00-kor:

at 11:00 AM next fri

Jövő pénteken ilyenkor futni:

at next fri

Futtatás ezen a napon 11:00 órakor, a következő hónapban:

at 11:00 AM next month

Futtatás 11:00-kor egy meghatározott napon:

at 11:00 AM 3/15/2020

Futás 30 perc múlva:

at now + 30 minutes

Két óra múlva indul:

at now + 2 hours

Futás holnap ilyenkor:

at tomorrow

Fuss csütörtökön ekkor:

at thursday

12:00-kor indul:

at midnight

Futás 12:00 órakor:

at noon

Ha Ön brit, akkor akár be is ütemezhet egy parancsot teaidőben (16:00):

at teatime

Nézzük a Job Queue-t

Az ütemezett jobok sorának megtekintéséhez írja be az atq parancsot, az alábbiak szerint.

Kimenet a

A sorban lévő minden egyes parancshoz az atq a következő információkat jeleníti meg:

Munkaazonosító
Tervezett időpontja
Menetrendszeri idő
Várólista, amelyben a feladat van. A sorok „a”, „b” és így tovább. A szokásos feladatok, amelyekkel ütemezett, az „a” sorba kerülnek, míg a köteggel ütemezett feladatok (a cikk későbbi részével) a „b” sorba kerülnek.
Az a személy, aki ütemezte a munkát.

Használja a parancssorban a lehetőséget

Nem kell interaktívan használnia a címet; parancsra is használhatja. Ez megkönnyíti a szkripteken belüli használatát.

Parancsokat írhat be a at at, így:

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

An

A munka elfogadása és ütemezése időpontig történik, a munkaszám és a végrehajtás dátuma pedig ugyanúgy, mint korábban.

A at használata a Parancsfájlok fájljaival

Parancssorozatot is tárolhat egy fájlban, majd átadhatja azt a at. Ez lehet parancsok egyszerű szöveges fájlja – nem kell futtatható szkriptnek lennie.

A -f (file) kapcsolóval a következő módon adhat át egy fájlnevet a at at:

at now + 5 minutes -f clean.txt

An

Ugyanezt az eredményt érheti el, ha átirányítja a fájlt ide:

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

Hogyan tekintheti meg az állások részletes nézetét

Amint azt korábban említettük, a munkákat messzire is ütemezheti. Néha elfelejtheti, hogy egy munka mit fog végezni. Az atq parancs megmutatja a sorban lévő feladatokat, de azt nem, hogy mit fognak csinálni. Ha egy feladat részletes nézetét szeretné látni, használhatja a -c (cat) kapcsolót.

Először az atq segítségével keressük meg a munkaszámot:

atq

Kimenet a

Most a 13-as számú feladatot használjuk a -c kapcsolóval:

at -c 13

A

Íme a munkával kapcsolatos információk bontása:

Első sor: Ez azt jelenti, hogy a parancsok az sh shell alatt fognak futni.
Második sor: Látjuk, hogy a parancsok 1000-es felhasználói és csoportazonosítóval fognak futni. Ezek az at parancsot futtató személy értékei.
Harmadik sor: Az a személy küld el, aki bármilyen e-mailt kap.
Negyedik sor: A Felhasználói maszk 22. Ez a maszk az ebben az sh munkamenetben létrehozott fájlok alapértelmezett engedélyeinek beállítására. A maszkot kivonjuk 666-ból, ami 644-et ad (az rw-r--r-- oktális megfelelője).
Fennmaradó adatok: A legtöbb környezeti változó.

Kimenet a

Egy teszt eredményei. Egy teszt ellenőrzi, hogy a végrehajtási könyvtár elérhető-e. Ha ez nem lehetséges, hibaüzenet jelenik meg, és a feladat végrehajtása megszakad.
A végrehajtandó parancsok. Ezek felsorolásra kerülnek, és megjelenik az ütemezett szkriptek tartalma. Ne feledje, hogy bár a fenti példánkban a szkriptet úgy írtuk, hogy Bash alatt fusson, akkor is egy sh shellben kerül végrehajtásra.

A köteg parancs

A köteg parancs hasonlóan működik a parancshoz, de három jelentős különbséggel:

A batch parancsot csak interaktívan használhatja.
Ahelyett, hogy egy adott időpontra ütemezné a végrehajtást, hozzáadja őket a sorhoz, és a batch parancs végrehajtja őket, ha a rendszer átlagos terhelése 1,5-nél alacsonyabb.
A fentiek miatt soha nem ad meg dátumot és időt a batch paranccsal.

Amikor a batch parancsot használja, név szerint hívja meg parancssori paraméterek nélkül, például:

batch

A

Ezután adjon hozzá feladatokat ugyanúgy, mint az at paranccsal.

A parancshoz való hozzáférés szabályozása

Az at.allow és at.deny fájlok szabályozzák, hogy ki használhatja az at parancscsaládot. Ezek a /etc könyvtárban találhatók. Alapértelmezés szerint csak az at.deny fájl létezik, és az at telepítésekor jön létre.

Ezek a következők:

at.deny: Felsorolja azokat az alkalmazásokat és entitásokat, amelyek nem használhatók a at a feladatok ütemezésére.
at.allow: Felsorolja, hogy kik használhatják a feladatok ütemezésére. Ha az at.allow fájl nem létezik, az at csak az at.deny fájlt használja.

Alapértelmezés szerint bárki használhatja a at. Ha korlátozni szeretné, hogy ki használhatja, használja az at.allow fájlt, hogy felsorolja azokat, akik használhatják. Ez egyszerűbb, mintha mindenkit hozzáadna az at.deny fájlhoz, aki nem tudja használni a at.

Így néz ki az at.deny fájl:

sudo less /etc/at.deny

A

A fájl felsorolja az operációs rendszer azon összetevőit, amelyek nem használhatók a at. Ezek közül sokat biztonsági okokból nem lehet megtenni, ezért egyiket sem szeretné eltávolítani a fájlból.

Most szerkesztjük az at.allow fájlt. Hozzáadjuk dave-et és Maryt, de senki más nem használhatja.

Először beírjuk a következőket:

sudo gedit /etc/at.allow

A

A szerkesztőben hozzáadjuk a két nevet, az alábbiak szerint, majd mentjük a fájlt.

Ha valaki más megpróbálja használni a at, akkor azt mondják neki, hogy nincs engedélye. Tegyük fel például, hogy egy eric nevű felhasználó a következőket írja be:

at

Az alábbiak szerint elutasítják.

Ismétlem, eric nincs az at.deny fájlban. Amint bárkit behelyez az at.allow fájlba, minden- és mindenki mástól megtagadják az at.

Kiválóan alkalmas egyszeri használatra

Amint láthatja, mind az at, mind a batch ideális olyan feladatokhoz, amelyeket csak egyszer kell futtatni. Ismét egy gyors áttekintés:

Ha valami nem szokásos folyamatot kell végrehajtania, ütemezze be a következővel.
Ha csak akkor szeretne egy feladatot futtatni, ha a rendszer terhelése elég alacsony, használja a kötegelt parancsot.