Cron időzítés percen belül

Cron tipp
Cron tipp

A cron használatáról már volt szó, így csak pár mondatban mutatom be az alapokat. A cron egy időzítő, aminél perces pontossággal megadhatjuk a feladatokat. Így a megadott rendszerességgel elvégzi a munkát.

Ha lehet, és van értelme én szeretem használni. A beállítása egyszerű, és azután nincs vele probléma. Nem marad el semmi :).

A cron egyik hiányossága, ami érthető: a minimális ciklus egy perces lehet, azaz percenként tud lefutni a leggyakrabban. Ez nem jelent nagy hátrányt, hiszen a legtöbb feladathoz nem is kell ennél gyakoribb periódus.

A probléma

Nemrég belefutottam abba, hogy jó lenne ennél gyakrabban is lefuttatni egy parancsot. Azaz öt másodpercenként egy mérését el kellene végezni egy adott időponttól egy másikig.

Ez nem túl gyakori, így keresgélni kellett az interneten. A megoldást nem sok helyen tárgyalták, legtöbb feltett hasonló kérdésre azt a választ kaptam, hogy időzítővel nem lehet megoldani, csak szkripttel. Használjam a watch parancsot, amihez már párosítható nagyon rövid periódus is.

A cron használatával

A cron használatával is megoldható a probléma, kis trükközéssel.

Az alap, a kiindulás egyszerű:

* * * * * date >> /test.txt

Azaz futtassuk le a date parancsot percenként és a kimenetet írjuk egy fájlba. Ezt érdemes használni egy cron idő beállítás ellenőrzéséhez, mert a fájlban látni kell, hogy mikor futott le a parancs. Sok felesleges munkától megóvja a kezdőt, ha egy cron feladat időzítését így leellenőrzi.

A megoldás valóban egyszerű, csak a Linuxos logikát kell követni: mindenre van program, csak használni kell. Ha percenként lefuttathatunk egy programot, akkor azt „altatni” is tudjuk a sleep paranccsal. Aminek a bemenő paramétere a másodperces érték. Így ha egy lefut percenként, vele együtt indul egy feladat, amit késleltetünk 20 másodperccel, akkor már az alapjait le is tettük a megoldásnak:

* * * * * date >> /test.txt
* * * * * sleep 30; date >> /test.txt

A ; köti össze a két parancsot, amikor az első lefut, akkor a másodikat indítja.

A fentiekben az történik, hogy a cron ütemező mindkét folyamatot egyszerre hajtja végre, azonban a második cron feladatnál 30 másodperccel késlelteti a shell-végrehajtást. Ugyanezt a fenti ötletet használva 15 másodperces cron feladat végrehajtási intervallumokat is ütemezhetünk:

* * * * * date >> /test.txt
* * * * * sleep 15; date >> /test.txt
* * * * * sleep 30; date >> /test.txt
* * * * * sleep 45; date >> /test.txt

Gyakorlatilag bármilyen, a sleep által ismert késleltetés megoldható, nem csak a percen belüli.

A leírtakat 2022. szeptemberében próbáltam ki MX Linux alatt.