107.2 Lecke 2
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
107 Adminisztratív feladatok |
Fejezet: |
107.2 A rendszerfelügyeleti feladatok automatizálása jobok ütemezésével |
Lecke: |
2/2 |
Bevezetés
Amint azt az előző leckében megtanultuk, a cron vagy systemd időzítők segítségével ütemezhetünk rendszeres jobokat, de néha előfordulhat, hogy egy jobot a jövőben csak egyszer kell lefuttatnunk egy adott időpontban. Ehhez egy másik hatékony segédprogramot használhatunk: az at
parancsot.
Jobok ütemezése az at
segítségével
Az at
parancs egyszeri feladatütemezéshez használható, és csak azt kell megadnunk, hogy a jobot mikor kell a jövőben futtatni. Miután a parancssorba beírtuk az at
parancsot, majd az időpontot, az at
promptba lépünk, ahol meghatározhatjuk a végrehajtandó parancsokat. A promptból a Ctrl+D billentyűkombinációval léphetünk ki.
$ at now +5 minutes warning: commands will be executed using /bin/sh at> date at> Ctrl+D job 12 at Sat Sep 14 09:15:00 2019
A fenti példában szereplő at
job egyszerűen öt perc múlva végrehajtja a date
parancsot. A cron
-hoz hasonlóan a standard kimenetet és a hibát e-mailben küldi el. Vegyük figyelembe, hogy az atd
daemonnak futnia kell ahhoz, hogy használhassuk az at
ütemezőt.
Note
|
A Linuxban a |
Az at
paranccsal kapcsolatos legfontosabb kapcsolók:
-c
-
Egy adott job azonosítójához tartozó parancsokat ír ki a standard kimenetre.
-d
-
Jobok törlése az azonosítójuk alapján. Ez az
atrm
aliasa. -f
-
A szabványos bemenet helyett egy fájlból olvassa be a jobot.
-l
-
A felhasználó függőben lévő jobjainak listázása. Ha a felhasználó a root, akkor az összes felhasználó összes jobját listázza. Ez az
atq
aliasa. -m
-
E-mail küldése a felhasználónak a job végén, még akkor is, ha nem volt kimenet.
-q
-
Egyetlen betűvel adjuk meg a várólistát
a
-tólz
-ig ésA
-tólZ
-ig (alapértelmezés szerinta
azat
ésb
abatch
esetén). A legmagasabb betűjelű sorokban lévő jobok fokozott prioritással kerülnek végrehajtásra. A nagybetűs sorba beküldött jobokatbatch
jobként kezeljük. -v
-
Megjeleníti azt az időpontot, amikor a job lefut a job olvasása előtt.
Ütemezett jobok listázása az atq
segítségével
Most ütemezzünk be két további at
jobot: az első a foo.sh
scriptet hajtja végre 09:30-kor, míg a második a bar.sh
scriptet egy óra múlva!
$ at 09:30 AM warning: commands will be executed using /bin/sh at> ./foo.sh at> Ctrl+D job 13 at Sat Sep 14 09:30:00 2019 $ at now +2 hours warning: commands will be executed using /bin/sh at> ./bar.sh at> Ctrl+D job 14 at Sat Sep 14 11:10:00 2019
A függőben lévő jobok listázásához használhatjuk az atq
parancsot, amely a következő információkat mutatja minden egyes jobról: a job azonosítója, a job végrehajtásának dátuma, a job végrehajtásának ideje, a várólista és a felhasználónév.
$ atq 14 Sat Sep 14 11:10:00 2019 a frank 13 Sat Sep 14 09:30:00 2019 a frank 12 Sat Sep 14 09:15:00 2019 a frank
Ne feledjük, hogy az at -l
parancs az atq
aliasa.
Note
|
Ha rootként futtatjuk az |
Jobok törlése az atrm
segítségével
Ha egy at
jobot szeretnénk törölni, akkor használhatjuk az atrm
parancsot, amelyet a job azonosítója (ID) követ. Például a 14-es azonosítójú job törléséhez futtassuk a következőt:
$ atrm 14
Az atrm
segítségével több jobot is törölhetünk, ha több azonosítót adunk meg, szóközzel elválasztva. Ne feledjük, hogy az at -d
parancs az atrm
aliasa!
Note
|
Ha rootként futtatjuk az |
A jobok ütemezéséhez való hozzáférés konfigurálása
Az átlagos felhasználók at
job-ütemezésének engedélyezését az /etc/at.allow
és /etc/at.deny
fájlok határozzák meg. Ha létezik az /etc/at.allow
fájl, akkor csak a benne felsorolt nem root felhasználók ütemezhetnek at
jobokat. Ha az /etc/at.allow
fájl nem létezik, de az /etc/at.deny
létezik, akkor csak a benne felsorolt nem root felhasználók nem ütemezhetnek at
feladatokat (ebben az esetben az üres /etc/at.deny
fájl azt jelenti, hogy minden felhasználónak engedélyezett az at
feladatok ütemezése). Ha egyik fájl sem létezik, akkor a felhasználó hozzáférése az at
jobok ütemezéséhez a használt disztribúciótól függ.
Időspecifikációk
A HH:MM
formátumot használva megadhatjuk, hogy egy adott at
job mikor kerüljön végrehajtásra, amelyet 12 órás formátum esetén választhatóan AM vagy PM követ. Ha a megadott időpont már eltelt, akkor a következő nap lesz feltételezve. Ha egy adott dátumot szeretnénk beütemezni, amelyen a job futni fog, akkor a dátuminformációt az időpont után kell hozzáadni a következő formátumok valamelyikével: month-name day-of-month
, month-name day-of-month year
, MMDDYY
, MM/DD/YY
, DD.MM.YY
és YYYYYY-MM-DD
).
Az alábbi kulcsszavak is elfogadottak: midnight
, noon
, teatime
(16:00) és now
, amelyet egy pluszjel (+
) és időperiódusok (percek, órák, napok és hetek) követnek. Végül, az at
-t a mai vagy a holnapi job futtatására is utasíthatjuk, ha az időpontot a today
vagy tomorrow
szavakkal egészítjük ki. Például az at 07:15 AM Jan 01 Jan 01
használatával január 01-én 07:15-kor hajthatunk végre egy feladatot, az at now +5 minutes
használatával pedig öt perc múlva. Az /usr/share
alatt található timespec
fájlban további információkat találhatunk az időspecifikációk pontos meghatározásáról.
Az at
egy alternatívája
A systemd rendszer- és szolgáltatáskezelőt használva egyszeri feladatokat is ütemezhetünk a systemd-run
paranccsal. Általában átmeneti időzítőegység létrehozására használják, hogy egy parancs egy adott időpontban végrehajtásra kerüljön anélkül, hogy szolgáltatásfájlt kellene létrehozni. Például root felhasználóként eljárva a date
parancsot 2019.10.06-án 11:30-kor futtathatjuk a következőkkel:
# systemd-run --on-calendar='2019-10-06 11:30' date
Ha két perc múlva futtatni szeretnénk a foo.sh
scriptet, ami az aktuális mappánkban van, az alábbit használhatjuk:
# systemd-run --on-active="2m" ./foo.sh
A systemd-run
és a systemd-run(1)
összes lehetséges felhasználási módját megismerhetjük a man oldalaikon.
Note
|
Ne feledjük, hogy az időzítők naplózva vannak a systemd journal fájljában, és a különböző egységek logjait a |
Gyakorló feladatok
-
A következő időmeghatározások mindegyikénél jelöljük, hogy melyik érvényes és melyik érvénytelen az
at
esetében:at 08:30 AM next week
at midday
at 01-01-2020 07:30 PM
at 21:50 01.01.20
at now +4 days
at 10:15 PM 31/03/2021
at tomorrow 08:30 AM
-
Ha egyszer már ütemeztünk egy jobot az
at
segítségével, hogyan tudjuk felülvizsgálni a parancsokat? -
Mely parancsokat használhatjuk a függőben lévő
at
jobok áttekintésére? Mely parancsokkal törölhetjük őket? -
A systemd esetében melyik parancsot használjuk a
at
alternatívájaként?
Gondolkodtató feladatok
-
Hozzunk létre egy
at
jobot, amely október 31-én 10:30-kor lefuttatja a home mappában találhatófoo.sh
scriptet! Tegyük fel, hogy közönséges felhasználók vagyunk! -
Jelentkezzünk be a rendszerbe egy másik közönséges felhasználóként, és hozzunk létre egy másik
at
jobot, amely holnap 10:00-kor futtatja abar.sh
scriptet! Tegyük fel, hogy a script a felhasználó home mappájában található! -
Jelentkezzünk be a rendszerbe egy másik közönséges felhasználóként és hozzunk létre egy újabb
at
jobot, ami futtatja afoobar.sh
scriptet 30 perc múlva! Tegyük fel, hogy a script a felhasználó home mappájában található! -
Most root felhasználóként futtassuk az
atq
parancsot az összes felhasználó ütemezettat
jobjainak áttekintéséhez! Mi történik, ha egy közönséges felhasználó hajtja végre ezt a parancsot? -
Root felhasználóként töröljük az összes függőben lévő
at
jobot egyetlen paranccsal! -
Futtassuk az
ls -l /usr/bin/at
parancsot és nézzük meg a jogosultságokat!
Összefoglalás
Ebben a leckében megtanultuk:
-
Az
at
használatát egyszeri jobok futtatásához egy adott időpontban. -
Az
at
jobok menedzselését. -
Felhasználói hozzáférés beállítását az
at
jobok ütemezéséhez. -
A
systemd-run
használata azat
alternatívájaként.
Az alábbi parancsokat és fájlokat tárgyaltuk a leckében:
at
-
Parancsok végrehajtása egy megadott időpontban.
atq
-
A felhasználó függőben lévő
at
jobjainak listázása, kivéve, ha a felhasználó a root. atrm
-
Az
at
jobok törlése, az azonosítószámuk alapján azonosítva. /etc/at.allow
and/etc/at.deny
-
Az
at
korlátozások beállítására használt fájlok. systemd-run
-
Tranziens
timer
egység létrehozása azat
alternatívájaként az egyszeri ütemezéshez.
Válaszok a gyakorló feladatokra
-
A következő időmeghatározások mindegyikénél jelöljük, hogy melyik érvényes és melyik érvénytelen az
at
esetében:at 08:30 AM next week
Valid
at midday
Invalid
at 01-01-2020 07:30 PM
Invalid
at 21:50 01.01.20
Valid
at now +4 days
Valid
at 10:15 PM 31/03/2021
Invalid
at tomorrow 08:30 AM monotonic
Invalid
-
Ha egyszer már ütemeztünk egy jobot az
at
segítségével, hogyan tudjuk felülvizsgálni a parancsokat?Használhatjuk az
at -c
parancsot, amelyet annak a jobnak az azonosítója követ, amelynek a parancsait szeretnénk áttekinteni. Vegyük figyelembe, hogy a kimenet tartalmazza a job ütemezésének időpontjában aktív környezet nagy részét is! Ne feledjük, hogy a root minden felhasználó feladatait megtekintheti! -
Mely parancsokat használhatjuk a függőben lévő
at
jobok áttekintésére? Mely parancsokkal törölhetjük őket?A
at -l
paranccsal áttekinthetjük a függőben lévő jobjainkat, azat -d
paranccsal pedig törölhetjük őket. Azat -l
azatq
, azat -d
pedig azatrm
aliasa. Ne feledjük, hogy a root minden felhasználó munkáit listázhatja és törölheti! -
A systemd esetében melyik parancsot használjuk a
at
alternatívájaként?A
systemd-run
parancs azat
parancs alternatívájaként használható egyszeri jobok ütemezésére. Használhatjuk például parancsok egy adott időpontban történő futtatására, különböző kezdőpontokhoz viszonyított naptári időzítő vagy monotonikus időzítő meghatározásával.
Válaszok a gondolkodtató feladatokra
-
Hozzunk létre egy
at
jobot, amely október 31-én 10:30-kor lefuttatja a home mappában találhatófoo.sh
scriptet! Tegyük fel, hogy egyszerű felhasználók vagyunk!$ at 10:30 AM October 31 warning: commands will be executed using /bin/sh at> ./foo.sh at> Ctrl+D job 50 at Thu Oct 31 10:30:00 2019
-
Jelentkezzünk be a rendszerbe egy másik közönséges felhasználóként, és hozzunk létre egy másik
at
jobot, amely holnap 10:00-kor futtatja abar.sh
scriptet! Tegyük fel, hogy a script a felhasználó home mappájában található!$ at 10:00 AM tomorrow warning: commands will be executed using /bin/sh at> ./bar.sh at> Ctrl+D job 51 at Sun Oct 6 10:00:00 2019
-
Jelentkezzünk be a rendszerbe egy másik közönséges felhasználóként és hozzunk létre egy újabb
at
jobot, ami futtatja afoobar.sh
scriptet 30 perc múlva! Tegyük fel, hogy a script a felhasználó home mappájában található!$ at now +30 minutes warning: commands will be executed using /bin/sh at> ./foobar.sh at> Ctrl+D job 52 at Sat Oct 5 10:19:00 2019
-
Most root felhasználóként futtassuk az
atq
parancsot az összes felhasználó ütemezettat
jobjainak áttekintéséhez! Mi történik, ha egy közönséges felhasználó hajtja végre ezt a parancsot?# atq 52 Sat Oct 5 10:19:00 2019 a dave 50 Thu Oct 31 10:30:00 2019 a frank 51 Sun Oct 6 10:00:00 2019 a emma
Ha rootként futtatjuk le az
atq
parancsot, minden függőben lévőat
job kilistázódik, bárki is legyen a tulajdonosa. Ha egyszerű felhasználóként futtatjuk, csak a saját függőben lévőat
feladataink kerülnek kilistázásra. -
Root felhasználóként töröljük az összes függőben lévő
at
jobot egyetlen paranccsal!# atrm 50 51 52
-
Futtassuk az
ls -l /usr/bin/at
parancsot és nézzük meg a jogosultságokat!# ls -l /usr/bin/at -rwsr-sr-x 1 daemon daemon 43762 Dec 1 2015 /usr/bin/at
Ebben a disztribúcióban az
at
parancsnak mind a SUID (azs
a tulajdonost jelző futtatható flag helyén), mind az SGID (azs
karakter a csoport futtatható flagje helyén) bitjei be vannak állítva, ami azt jelenti, hogy a fájl tulajdonosának és csoportjának jogosultságaival hajtódik végre (mindkettőnél adaemon
). Ez az oka annak, hogy a hétköznapi felhasználók aat
segítségével ütemezhetnek be jobokat.