Tartalomjegyzék
Időzítés
- Szerző: Sallai András
- Copyright © 2011, Sallai András
- Szerkesztve: 2011, 2012, 2013, 2016, 2017
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Bevezetés
Az időzítés nagyon hasznos dolog a rendszergazda kezében. A mentéseket, diagnosztikai scripteket, karbantartó scripteket futtathatunk vele, olyan időpontban, amikor kevés felhasználó dolgozik a gépen.
Kétféle időzítés lehetséges: egyszeri és ciklikus. Az előbbit az „at”, az utóbbit a cron démon végzi. A cronból persze van egy másik is az anacron. Ha ezt használjuk és az időzítés a gép kikapcsolt állapotában következik be, akkor a gép első indulásakor végrehajtódnak az időzített parancsok.
Egy asztali számítógép „élőbbé” tehető vele, ha felhasználjuk valamelyik beszédszintetizátort, ha számítógéppel kimondatunk néhány dolgot időzítve.
cron
A cron használata
A cron egy olyan csomag, amely minden Linux rendszeren alapértelmezetten telepszik. Lehetővé teszi parancsok időzítését, ciklikusan.
Ha egy felhasználó szeretne egy parancsot időzíteni a következő parancsot kell használnia:
$ crontab -e
Ennek segítségével elindul egy szerkesztő, amelyben megadhatjuk a futtatandó parancsunkat. Valójában egy konfigurációs fájlt szerkesztünk.
A crontab -e az alapértelmezett szövegszerkesztőt használja. Ha valamilyen számunkra idegen szerkesztőben indul a crontab, állítsuk be az alapértelmezett szövegszerkesztőt, rendszergazdaként a következő paranccsal:
# update-alternatives --config editor
Én személy szerint az mcedit parancsot szeretem, amely az mc csomagban található.
Egy bejegyzés az időzítés időpontjából, és a parancsból áll. Az idő 5 részre tagolódik. Az alábbi táblázat a paranccsal együtt mutatja meg, melyik rész mit jelent.
perc | óra | a_hónap_napja | hónap | a_hét_napja (hétfő 1, kedd 2, stb) | parancs |
0 6 * * * /usr/local/webalizer > /dev/null 2>&1
Ha nem tesszük a végére a /dev/null-os részt, akkor hibaüzenet esetén küld egy e-mailt a root számára. A 2>&1 segítségével a stdout-t és a stderr-t átirányítjuk a /dev/null-ba.
Az egyes részek között egy vagy több szóköz vagy tabulátor található.
A következő táblázat az időpontok meghatározásához használható jeleket taglalja:
0-9 | Megadhatunk számokat |
, | Vesszővel tagolva több számot is megadhatunk |
- | Intervallum (0-5 az első helyen például azt jelenti, egésztől kezdve percenként 5-ig.) |
* | A beírható összes lehetséges értéket jelenti |
/ | lépésköz (például az első helyen: */2 két percenként; 1-10/2 ez jelentheti 1-10 két percenként ) |
Minden hétfő 9:00:
0 9 * * 1 /usr/local/sajatScript.sh 2>&1 /dev/null
Minden kedd 9:00:
0 9 * * 2 /usr/local/sajatScript.sh 2>&1 /dev/null
Minden nap ötpercenként:
*/5 * * * * /usr/local/sajatScript.sh 2>&1 /dev/null
Minden nap tízpercenként:
*/10 * * * * /usr/local/sajatScript.sh 2>&1 /dev/null
Minden nap kétpercenként, egy és tízperc közötti időkben:
1-10/2 * * * * /usr/local/sajatScript.sh 2>&1 /dev/null
Minden nap kétpercenként, egy és tízperc közötti időben 9 után:
1-10/2 9 * * * /usr/local/sajatScript.sh 2>&1 /dev/null
Egy állományban is leírhatjuk a cronbeálításainkat:
$ crontab cronfajl.txt
Az előző beállítások törlődnek.
Napi scriptek
Naponta futtatandó scripteket találunk a következő könyvtárban:
/etc/cron.daily
A scriptnek futási joggal kell rendelkeznie. Ha szeretnénk egy ilyen scriptet tiltani, akkor le kell vennünk a futási jogot. Legyen a példa kedvéért egy farago.sh script. Tiltása:
chmod -x /etc/cron.daily/farago.sh
Újból engedélyezése:
chmod +x /etc/cron.daily/farago.sh
Az Debian alapú rendszerekben van például egy mlocate script:
/etc/cron.daily/mlocate
Mellesleg a locate kereső parancs adatbázisát építi naponta újra. Ennek tiltása:
chmod -x /etc/cron.daily/mlocate
at
Az „at” egy parancs és egy démon is egyben. Segítségével, időzítve tudunk egy parancsot végrehajtani. A parancs az adott időpontban lefut.
Indítsuk el az at parancsot, megadva azt az időt, amikor le kell futnia egy parancsnak. Az idő megadásához a POSIX.2 szabvány időmeghatározásait használhatjuk. Például az óra és a perce formája: „HH:MM”. Legyen egy espeak nevű program, amellyel szeretnénk kimondatni egy szöveget 5 óra 12 perckor, a szöveg pedig lehet a következő: „Szeretem az almát”. Indítsuk az at parancsot:
$ at 05:12
Az at parancsnak egy várakozási jele jelenik meg. Ide kell beírni az indítani kívánt parancsot
> espeak -vhu "Szeretem az almát" >
Ha végeztünk „Enter” után még mindig a várakozási jel fogad. Ekkor a Ctrl+D segítségével küldjünk egy fájl vége jelet, így visszakapjuk a Bash várakozási jelét, a parancssort.
Az időzített parancsok lekérdezése:
$ atq 1 Sat Jun 29 11:02:00 2013 a joska
Példa
*/1 * * * * bash -c 'espeak "egy" && espeak "kettő"'
Ha szeretnénk, hogy ne kapjunk üzenetet e-mailben a végére:
30 15 * * 5 /usr/bin/espeak -vhu "Ideje hazamenni" 2>&1 /dev/null
Ez a beállítás pénteken 15:30-kor szól, hogy ideje hazamenni.