Hobbi szinten szervert üzemeltetek, emiatt kénytelen voltam beletanulni a crontab rejtelmeibe. Nem volt nehéz, így most leírom az általános információkat, amiket jó, ha tudsz.
Tehát Linux rendszereken lehetőségünk van időzített feladatokat beállítani. Erre használhatjuk a crontabot. Akinek a tárhelyszolgáltatója engedélyezi, az használhatja ezt a funkciót akár saját tárhelyén is. Erről érdemes megkérdezni a saját tárhely szolgáltatódat, hogy náluk pontosan milyen parancsok és milyen elérési úton futtathatóak.
Én most a linux terminálon keresztül használható parancsot mutatom be.
A Cron lehetőséget ad ütemezett feladatok beállítására Linux rendszereken. A crontab egy egyszerű szöveges fájl, amely a futtatandó parancsokat és a hozzájuk tatrtozó paramétereket tartalmazza.
Létezik két file, amikkel korlátozni lehet, hogy az adott rendszeren melyik felhasználó futtathat cronjobot. Ha saját telepítésű, Ubuntu alapú rendszerünk van, akkor alap esetben használhatod. (Többi rendszernél nincs tapasztalatom, így hülyeséget sem akarok írni.)
Tehát, ha a /usr/lib/cron/cron.allow
vagy a /etc/cron.allow
fájlban szerepel a nevünk, esetleg nem létezik a file, és a /usr/lib/cron/cron.deny
vagy a /etc/cron.deny
fileban nem szerepel a felhasználónevünk, akkor van jogunk módosítani a crontab-et.
Hogyan használjuk?
Három féle kapcsolóval használhatjuk a crontab parancsot.
Ha első alkalommal szerkesztjük a crontab-et, akkor megkérdezheti a rendszer, hogy melyik szerkesztőt szeretnénk használni. Nekem a nano jött be.
a crontab összesen 6 oszlopból áll. Ezek sorban:
Az egyes oszlopokat szóközzel választjuk el, joker-karakterként “*”-ot használhatunk, ezzel, ha nem akarunk értéket megadni, helyettesíthetjük vele. Ha egy oszlopban több adatot akarunk megadni, akkor az értékek közé vesszőt kell tennünk, de a vessző után ne tegyünk szóközt. Ha intervallumot akarunk megadni, akkor kötőjelet kell az értékek közé tenni.
01 04 1 1 1 /usr/bin/valami_mappa/valami_parancs
A fenti példa a /usr/bin/valami_mappa/valami_parancs
parancsot futtatja, hajnal 4:01-kor, minden január 1-én, ami hétfőre esik. Nah jó ez bonyolult lett :)
Amint említettem, lehet csillaggal helyettesíteni az oszlopokban. A csillag jelentése minden. Tehát minden percben, minden órában, minden nap, minden hónapban.
01 04 * * * /usr/bin/valami_mappa/valami_parancs
A példa azt jelenti, hogy minden nap, minden hónapban hajnal 4:01-kor fut le a parancsunk.
01,31 04,05 1-15 1,6 * /usr/bin/valami_mappa/valami_parancs
Itt a következő történik. Minden Januárban és Júniusban (4. oszlop 1,6 értékkel) elsejétől tizenötödikéig (3. oszlop 1-15 értékkel) hajnal 4 és hajnal 5-kor (2. oszlop 04,05 értékkel) az első és 31. percben (1. oszlop 01,31 értékkel) fusson le a parancsunk. :) Tudom bonyolódik, de ettől vannak még cifrábbak is :)
Még egy fontos dolog maradt ki. Erre is muszáj kitérnünk, hisz van, hogy minden második órában akarunk valamit futtatni.
00 00,02,04,06,08,10,12,14,16,18,20,22 * * * /usr/bin/valami_mappa/valami_parancs
Tehát ezt felejtsük el :)
*/5 : minden 5-el osztható alkalommal (0,5,10,15,20,25…).
Jelentése: minden 5. percben, vagy (*/30) minden fél órában.
00 */2 * * * /usr/bin/valami_mappa/valami_parancs
Csak kicsit egyszerűbb :)
1-4,6,8-12: 1,2,3,4,6,8,9,10,11,12. Például használhatjuk munkaidő, nyár vagy hétköznapok megjelölésére.
Erre mondjuk azt tudnám elképzelni hirtelen, hogy programozóként elvileg 10 perc pihenő jár óránként, így egy program reggel 8-tól munkaidő végéig, ebédszünet kivételével, minden órában értesít, hogy álljak fel a géptől. Hogy életképes legyen a példa 1 órás az ebédszünet (Tudom, hogy sehol sem annyi, főleg a kisebb informatikai cégeknél. Sőt, ha óránként a 10 percet ki akartuk használni, akkor kirúgással fenyegettek, vagy bércsökkentéssel :) Tehát ez most egy nagyon rossz példa ilyen téren, de példaként jó)
50 8-11,13-16 * * * /usr/bin/kelj_fel_es_jarj
Tehát reggel 8:50-kor jelez először a gép, egészen 11:50-ig, majd 13:50-16:50-ig. 12:00-13:00 között pedig kajálunk, ilyenkor nem vagyunk gépnél, tehát felesleges jeleznie.
00 8-11,13-16 * * * /usr/bin/monitor_be
50 8-11,13-16 * * * /usr/bin/monitor_ki
Tehát reggel 8:00-11:00 között minden 0. percben bekapcsol a monitorunk, 50-kor ki. Délben a szokásos órás ebéd, majd 12:00-16:00 között ismét bekapcsol-kikapcsol, végül 16:50-kor mehetünk haza :)
A fenti példák alapján szerintem hétköznapi használatra simán elég ennyi. Persze lehet ezt fokozni a végtelenségig, de jelenleg nem az a célunk. Egyszerűen csak az alapokat mutattam meg.
Ami még kimaradt így a végén és talán fontos lehet, ha egy időben 2 jobot is futtatni akarunk, akkor nem kell 2 sorba írni ugyanazokkal a paraméterekkel, elég egyetlen sor és a két parancs közé &&
.
00 /2 * * * /usr/bin/parancs_1 && /usr/bin/parancs_2
Tehát, minden második órában fusson le a parancs_1 és a parancs_2.
Remélem ezzel a kis szösszenettel segítettem, hogy közelebb kerülj a cronjobokhoz.