[[oktatas:linux|< Linux]]
====== Időzítés ======
* **Szerző:** Sallai András
* Copyright (c) 2011, Sallai András
* Szerkesztve: 2011, 2012, 2013, 2016, 2017
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|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.