[[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.