cron

Cron

Információ
Beírva VS
Operációs rendszer Unix típus
típus UNIX segédprogram ( d ) Daemon
számítógépes feladatütemezés

A cron egy olyan program, amely lehetővé teszi a Unix rendszerek felhasználóinak, hogy automatikusan futtassanak szkripteket, parancsokat vagy szoftvereket egy előre meghatározott dátumon és időpontban, vagy előre meghatározott ciklusban.

Eredet

A koncepció a program eredetileg a Unix rendszerek a Berkeley és az AT & T , és később ésszerűsíteni a Paul Vixie . Az eredeti elképzelés az volt, hogy legyen egy olyan szolgáltatás, amely percenként felébred, elemzi az adott könyvtárban található fájlkészletet, és onnan határozza meg, hogy az ilyen shell parancsokat végre kell-e hajtani ebben az időszakban.

Cron

Cron a csonkolása cron lap maga a csonkolása c h ron o lap le, ami azt jelenti: „tervezési táblázat” (görögül Chronos (χρόνος) azt jelenti, idő).

Ez egy nagyon hasznos szolgáltatás a rendszeres rendszergazdai feladatokhoz , de bármi máshoz nagyon jól használható. Például a cron szombat és vasárnap kivételével minden nap hét órakor lejátszhat egy ogg fájlt , hogy zenére ébredjen.

A cron egy démon , amely számítógépes szakzsargonban a háttérben futó programra utal. A cron ( crond ) szolgáltatás tehát megvárja, amíg a konfigurációs fájlban megadott idő ( crontab néven szerepel ), majd elvégzi a megfelelő műveletet, és visszaalszik a következő eseményig.

A cron szolgáltatást a root fiók indítja el annak érdekében, hogy alkalmazkodni tudjon az egyes felhasználók identitásához. Egyes Unixokon, ha megölik (a kill paranccsal), akkor a rendszer automatikusan újraindítja.

crontab

crontaba program neve Unix (és Linux ) alatt, amely lehetővé teszi a cron program konfigurációs tábláinak szerkesztését . Ezek a táblázatok meghatározzák a végrehajtandó feladatokat és azok végrehajtási ütemezését, esetleg periodicitással. Kiterjesztésként gyakran hívunk cronnak (vagy angolul cron jobnak ) bármilyen, időszakos ütemezés szerint elindított feladatot.

Művelet

A parancs crontabmódosítja a felhasználóval kapcsolatos fájlt. A biztonság érdekében crontabellenőrizze a szintaxist a fájl frissítése előtt. Ez a fájl a fa szerkezetében található /var , például:

Tehát rootegy Debian gépen lévő felhasználó számára a cron táblát a rendszer tárolja/var/spool/cron/crontabs/root

A legtöbb Linux rendszerben (SuSE, Debian, Red Hat ) szintén van központosított cron tábla /etc/crontab.

Vannak olyan feljegyzések is /etc/cron.d, /etc/cron.hourly, /etc/cron.daily, /etc/cron.weeklyés /etc/cron.monthlyamelyek tartalmazzák a cron-táblázatok a különböző részein a rendszer (log forgatás, frissítési fájlok ...).

Azoknál a munkaállomásoknál, amelyek nem feltétlenül működnek a nap 24 órájában, az anacron alkalmazás lehetővé teszi olyan parancsok indítását, amelyeknek a számítógép kikapcsolt állapotában kellett volna lenniük.

használat A táblázat elolvasása

A következő parancssor megjeleníti a cron táblázat tartalmát az aktuális felhasználó számára:

$ crontab -l

Ez a parancs nem jeleníti meg a központosított táblázatot ( /etc/crontab).

A táblázat módosítása

A következő paranccsal módosíthatja az aktuális felhasználó cron tábláját:

$ crontab -e

Ez a parancs az alapértelmezett szerkesztő elindítását eredményezi (általában vi). Ezután a szerkesztő megjeleníti az aktuális táblázatot. Első indításkor crontaba táblázat üres, esetleg súgó megjegyzésekből (a karakterrel kezdődő sorokból #).

Az alapértelmezett szerkesztő a környezeti változókkal $EDITORvagy $VISUAL. Például a szerkesztő konfigurálásához vim :

$ export EDITOR=vim

Ez a parancs nem teszi lehetővé a központosított tábla ( /etc/crontab) módosítását sem.

Asztalcsere

crontabfelülírhatja az aktuális táblázatot is egy új táblával. Ez az új tábla paraméterként megadható egy fájlban:

$ crontab fichier-contenant-la-nouvelle-table.txt A táblázat törlése

A következő parancssor megerősítés nélkül törli a cron tábla tartalmát az aktuális felhasználó számára:

$ crontab -r Táblázat szintaxisa Értékelés

A táblázat minden bejegyzése (minden sor) megfelel az elvégzendő feladatnak , és tiszteletben kell tartania ezt a jelölést:

mm hh jj MMM JJJ tâche
  • mm a perceket jelenti (0 és 59 között)
  • hh az órát jelenti (0-tól 23-ig)
  • dd a hónap napjának számát jelenti (1-től 31-ig)
  • Az MMM a hónap nevének rövidítése (jan, febr, ...) vagy a hónap számának rövidítése (1-től 12-ig)
  • JJJ a nap nevének vagy a hét napszámának rövidítését jelenti:

Minden számérték ( mm , óó , jj , MMM , JJJ ) esetében a lehetséges jelölések a következők:

  • *  : minden egységhez (0, 1, 2, 3, 4 ...)
  • 5.8  : 5. és 8. egység
  • 2-5  : egységek 2-től 5-ig (2, 3, 4, 5)
  • * / 3  : 3 egységenként (0, 3, 6, 9 ...)
  • 10-20 / 3  : minden 3 egység, a tizedik és a huszadik között (10, 13, 16, 19)

Ha ugyanazon a soron adja meg a „hónap napja számát” és a „hét napját”, akkor a cron akkor hajtja végre a feladatot, amikor az egyik mező megegyezik. Például a következő sor azt jelzi, hogy a feladatot péntekenként és minden hónap 13. napján éjfélig kell végrehajtani:

0 0 13 * 5 tâche Műveletek naplója

A feladat egy végrehajtandó parancs . Ha ez a feladat a szokásos kimenetére vagy szabványos hibájára ír , akkor a crond démon elküldi őket e-mailben a megfelelő felhasználónak (akit a hatodik paraméter jelez).

Annak megakadályozása érdekében, hogy ezeket az információkat e-mailben továbbítsák, lehetőség van fájlokban történő átirányításra. Például :

mm hh jj MMM JJJ tâche > fichier-1 2> fichier-2
  • fichier-1 szabványos kimenetet tartalmaz
  • fichier-2 tartalmazza a szokásos hibát

Vagy összegyűjti a standard kimeneteket és hibákat ugyanabban a journal.txt nevű fájlban  :

mm hh jj MMM JJJ tâche >> /mon/répertoire/journal.txt 2>&1 Parancsikonok
Parancsikonok Leírás Egyenértékű
@reboot Indítás közben Nem
@yearly Minden évben 0 0 1 1 *
@annually Minden évben 0 0 1 1 *
@monthly Minden hónap 0 0 1 * *
@weekly Minden héten 0 0 * * 0
@daily Minden nap 0 0 * * *
@midnight Minden éjjel 0 0 * * *
@hourly Minden órában 0 * * * *
Példák

Mindegyik példa szabad lemezterületet ( df parancs ) spórol meg a fájlban /tmp/df.logkülönböző időpontokban. Az előzmények megőrzése érdekében ezek a példák az átirányítást használják, >>amely lehetővé teszi az új adatok hozzáadását a fájl végén (ha ez már létezik, különben létrejön).

Minden nap 11: 30-kor:

30 23 * * * df >> /tmp/df.log

Óránként, 5 perctől kezdve:

5 * * * * df >> /tmp/df.log

Minden hónap első napján a 23  h  30  :

30 23 1 * * df >> /tmp/df.log

Minden hétfőn 22  óra  28  :

28 22 * * 1 df >> /tmp/df.log

Minden pénteken és mind a 13 bármely hónapban a 11  h  22  :

22 11 13 * 5 df >> /tmp/df.log

Minden pénteken 13 bármely hónapban a 11  h  22  :

22 11 13 * * [ `date '+\%w'` -eq 5 ] && df >> /tmp/df.log

2 és 5 minden hónap 10  h  12  :

12 10 2-5 * * df >> /tmp/df.log

Minden páratlan napon a hónap 23  óra  59  :

59 23 */2 * * df >> /tmp/df.log

Minden munkanapon 10 órakor:

0 22 * * 1-5 df >> /tmp/df.log

5 percenként:

*/5 * * * * df >> /tmp/df.log

A hónap minden utolsó napján (a% előtti visszavonás kötelező a crontab szerkesztésekor, ellentétben a parancs manuális végrehajtásával):

0 0 28-31 * * [ `/bin/date +\%d` -gt `/bin/date +\%d -d "1 day"` ] && df >> /tmp/df.log  
  • A hónap minden utolsó vasárnapján:
    • Első megoldás: hasonlítson össze minden vasárnapot a következő hétével.
0 0 * * 0 [ `/bin/date +\%d` -gt `/bin/date +\%d -d "7 day"` ] && df >> /tmp/df.log
    • Második megoldás: minden hónapban tesztelje az utolsó hetet.
0 0 25-31 1,3,5,7,8,10,12 0 my-script.sh 0 0 24-30 4,6,9,11 0 my-script.sh 0 0 22-29 2 0 my-script.sh
    • Harmadik megoldás: futtasson egy szkriptet a naptárral.
0 0 21-31 * * /bin/script.sh $ cat /bin/script.sh $ cat /bin/script.sh #!/bin/sh #(Pour les OS où `cal -m` met lundi en position 1) #dernierdimanche=`cal -m | awk '{print $7}' | tail -1`; #(ERREUR lignes vides si $7="") #CORRECTIF pour tous les OS dernierdimanche=`cal -m |awk 'BEGIN{p=7};(NR==2 && $1=="di"){p=1};(NF>=p){di=$p};END{print di};'`; aujourdhui=`date +%d` if [ $aujourdhui -eq $dernierdimanche ] then df >> /tmp/df.log else echo "Nous ne sommes pas encore le dernier dimanche du mois." fi  
    • Negyedik megoldás, használja az fcron-t .
  • A hónap minden első vasárnapján:
    • Első megoldás: teszt minden vasárnap:
0 0 * * 0 [ `date '+\%e'` -le 7 ] && df >> /tmp/df.log
    • Egy másik megoldás: a szkript naptárral:
0 0 1-7 * * /bin/script2.sh $ cat /bin/script2.sh $ cat /bin/script2.sh #!/bin/sh #premierdimanche=`cal -m | awk '{print $7}' | head -3 | tail -1`; #(ERREUR si lundi "") premierdimanche=`cal -m | awk '(NR==3){print $NF}'`; #(CORRECTIF simple, pour lundi en position 1) aujourdhui=`date +%d` if [ $aujourdhui -eq $premierdimanche ] then df >> /tmp/df.log else echo "Nous ne sommes pas encore le premier dimanche du mois." fi   A kimeneti fájl időbélyege

A fenti példák átirányítást használnak >>egy napló létrehozására több futtatás során.

Különböző fájlokba történő íráshoz lehetőség van a parancs használatára date, mint például a következő példában:

30 23 * * * df > /tmp/df_`date +\%d_\%m_\%Y_\%H_\%M`.log

(a "karaktert (súlyos akcentus, U + 0060) a franciaországi AZERTYAlt Gr billentyűzet [ ] + [7] billentyűinek kombinációjával állítjuk elő )

Természetesen egy másik megoldás a fájl szkriptbe írása appelle-df.sh :

#!/bin/sh JJ_MM_ANNEE_HH_MM=`date +\%d_\%m_\%Y_\%H_\%M` df > /tmp/df_${JJ_MM_ANNEE_HH_MM}.log

És cserélje le az előző cron táblázatot a következőkre:

30 23 * * * appelle-df.sh Hasznos parancsok

Ezek a parancsok nem minden Linux és Unix disztribúciónál működnek .

Jelzi az összes felhasználó utoljára végrehajtott feladatának idejét:

ls -lut /etc/init.d/cron

Információk kivonása a cron tábláról a rendszernaplóból:

grep -w cron /var/log/syslog

Indítsa újra a cron démonot:

/etc/init.d/cron force-reload

Az idő változik

Amikor a téli / nyári idő megváltozik , a hivatalos idő 2 óráról 3 órára változik (a Franciaországban hatályos szabályok szerint). A 14:00 és 00:00 2 59 között tervezett feladatokat tehát nem hajtják végre. Ezzel szemben a nyári / téli időváltozás során ezeket a feladatokat kétszer (hajnali 3 órakor, még mindig hajnali 2 órakor) hajtják végre.

Ennek a kellemetlenségnek az elkerülése érdekében a legtöbb Unix rendszer úgy van konfigurálva, hogy használja az UTC ( Coordinated Universal Time ) időt , amelyre nem vonatkoznak ezek a nyári időszámítási szabályok.

GNU mcron

Az mcron nem az említett program megfelelő megvalósítása, hanem a Séma nyelvén kódolt jelentős fejlődés . Nem csak a hagyományos módszert támogatja , hanem a Scheme-ben írt konfigurációs fájlokat is, amelyek bizonyos rugalmasságot biztosítanak az elvégzendő feladatok meghatározásában (például figyelembe veheti a rendszer terhelését ). Az újdonság abban rejlik, hogy képes elolvasni az összes szükséges utasítást, feldolgozni azokat, amelyeket végre kell hajtani, és a megadott időn belül aludni kell. Amikor felébred, a parancsok végrehajtásra kerülnek, és kiszámítják a következő kezelés idejét. Ennek az új programnak a specifikációi a Lisp család egyik nyelvén vannak megírva , amely lehetővé teszi több utasítás egyidejű feldolgozását és nagyobb rugalmasságot, mint a Vixie fájlformátuma . Arról nem is beszélve, hogy a felhasználók crontabs fájljaiban végrehajtott változtatásokat közvetlenül a crontab program jelenti neki , míg a cronnak percenként ellenőriznie kell az / etc / crontab alkalmazást, bár ennek a fájlnak a használata erősen nem ajánlott és letiltható. Ez szabad szoftver által forgalmazott GNU Project feltételei alapján a GPL licenc .

Forrás

Egyes részei ennek a cikknek, vagy egy korábbi változata a cikk cikkén alapulnak, ütemezési feladatokat honlapon Hogyan működik . Az eredeti cikk a következő szerzői jogi megjegyzést tartalmazza: „© Copyright 2004 Jean-François Pillou - Hosted by Web-solutions.fr. A CommentCaMarche.net ezen dokumentuma a GNU FDL licenc alá tartozik . Másolhatja és módosíthatja ennek az oldalnak a másolatait, amennyiben ez a megjegyzés világosan megjelenik. ". Azóta ez a webhely Hogyan működik? megváltoztatta az engedélyét. És végül az eredeti cikk már nem érhető el.

Megjegyzések és hivatkozások

  1. A Unix betűszavak listája
  2. vagy esetleg kronográfból származik ( „  Cron job konfigurálása  ” , a Drupal.org oldalon (konzultáció 2007. július 27-én )  : „Cron, ami a kronográfot (…) jelenti” ), vagy a Command Run On ( Cron )
  3. A környezeti változó $EDITORvagy$VISUAL
  4. (in) Cron munka - minden hónap első vasárnapján végrehajtandó
  5. (en) "  GNU mcron  " , a directory.fsf.org , FSF könyvtárban ,2014. május 25

Lásd is

Kapcsolódó cikkek

Külső linkek

  • (en) Unix man oldal ( man oldal )
    • fr) Unix man oldal (francia
    man oldal )
  • (on) Bevezetés a cronba
  • A rendszeres feladatok ütemezése: crontab on math-linux.com
  • A próbabábuk krónabábja