< Linux

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.