Cron & crontab, magyarázta

Lucaine tette közzé egy ideje kiváló bemutató a cronról és a crontab-ról hogy szerintem érdemes megosztani. A Cron egyfajta megfelelője az ütemezett feladatoknak a Windows rendszerben, csak azt, hogy a terminálról kezeljék. Azok, akik a vizuális felületet részesítik előnyben ugyanazon cél elérése érdekében, láthatják ezt egy másik cikk.

Mi a cron?

A cron név a görög chronos-ból származik, ami "időt" jelent. A Unix operációs rendszerben a cron egy szokásos háttérfolyamat-kezelő (démon), amely rendszeres időközönként (például minden percben, napban, hétben vagy hónapban) futtatja a folyamatokat vagy a parancsfájlokat. A végrehajtandó folyamatokat és a végrehajtás időpontját a crontab fájl határozza meg.

cómo munkák

A cron démon innen indul /etc/rc.d/ o /etc/init.d az eloszlástól függően. Cron fut a háttérben, percenként ellenőrzi a crontab feladattáblát / etc / crontab Az in / var / spool / cron az elvégzendő feladatok keresésére. Felhasználóként parancsokat vagy parancsfájlokat adhatunk feladatokhoz a cronhoz egyes folyamatok automatizálásához. Ez hasznos például egy rendszer vagy egy jó biztonsági másolat rendszerének frissítéséhez.

Kapcsolódó cikk:
Oktatóanyag: Telepítse a .tar.gz és a .tar.bz2 csomagokat

Mi a Crontab?

A Crontab egy egyszerű szöveges fájl, amely tárolja a végrehajtandó parancsok listáját a felhasználó által meghatározott időpontban. A Crontab ellenőrzi a parancs vagy a parancs futtatásának dátumát és időpontját, a végrehajtási engedélyeket, és a háttérben teszi. Minden felhasználónak megvan a saját crontab fájlja, valójában a / etc / crontab feltételezzük, hogy ez a root felhasználó crontab fájlja, amikor a normál felhasználók (és még a root is) saját crontab fájlt akarnak létrehozni, akkor a crontab parancsot fogjuk használni.

A Crontab a legegyszerűbb módszer a cron-feladatok kezelésére többfelhasználós rendszereken, akár egyszerű rendszerfelhasználóként, akár root felhasználóként.

A crontab használata

Egy egyszerű példával kezdünk.

Automatizálni fogjuk egy rendszer frissítését, hogy kiküszöböljük a bosszantó "mindig frissítenem kell, és ez nem tetszik!"

hogyan kell
Kapcsolódó cikk:
Parancsok a rendszer ismeretéhez (hardver és néhány szoftverkonfiguráció azonosítása)

Először készítünk egy forgatókönyvet. Ezt a szkriptet a cron hívja meg, és tartalmazni fogja az összes utasítást, amelyet meg akarunk tenni, ezért több esetben és többféleképpen is tesztelni kell, mielőtt a cronba felvennénk, egy ilyen egyszerű frissítő szkript:

#! / bin / bash #script frissítési példa #választja a terjesztést # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Távolítsa el a # számot a disztribúciós sorból. Abban az esetben, ha ez az Ubuntu / Debian, az apt-get paranccsal kezdődik.

A szkriptet update.sh néven mentjük el (pl. A szkriptek az otthoni könyvtárat tárolják). Az említett parancsfájl végrehajtási engedélyeit a következőkkel módosítjuk:

chmod a + x ~ / scripts / update.sh

Néhányszor végrehajtjuk a szkriptet, hogy ellenőrizzük, hogy minden zökkenőmentesen működik-e, módosítjuk a szükségeset (nem tartalmazhat hibákat, különben a cron csak újra és újra megismétel egy hibát). Most adjuk hozzá a feladatot a crontab-hoz.

Feladatok hozzáadása a crontab-hoz

A crontab kiadását a crontab -e segítségével hajtjuk végre, egyes disztrókban (például az Ubuntuban) ez lehetőséget ad arra, hogy kiválasszuk a kívánt szövegszerkesztőt, a többi marad a vi. A crontab fájl ilyennek fog kinézni.

# mh dom mon dow felhasználói parancs

ahol:

  • m a szkript végrehajtásának percének felel meg, az érték 0 és 59 között mozog
  • h a pontos idő, a 24 órás formátum kezelése, az értékek 0 és 23 között változnak, a 0 pedig 12:00 éjfél.
  • dom a hónap napjára utal, például megadhat 15-öt, ha 15 naponta szeretne futni
  • dow a hét napját jelenti, lehet numerikus (0–7, ahol 0 és 7 vasárnap), vagy a nap első 3 betűje angolul: hétfő, kedd, sze, cs, péntek, szo, nap.
  • használó meghatározza azt a felhasználót, aki végrehajtja a parancsot, lehet root vagy más felhasználó, amennyiben rendelkeznek engedéllyel a szkript végrehajtására.
  • parancs a végrehajtandó parancs parancsára vagy abszolút elérési útjára utal, például: /home/usuario/scripts/update.sh, ha szkriptet hív, futtathatónak kell lennie

Hogy tisztázzunk néhány példát a kifejtett cron feladatokról:

15 10 * * * felhasználó /home/user/scripts/update.sh

Minden nap 10: 15-kor futtatja az update.sh parancsfájlt

15 22 * * * felhasználó /home/user/scripts/update.sh

Minden nap 10: 15-kor futtatja az update.sh parancsfájlt

00 10 * * 0 root apt-get -y frissítés Root felhasználó

Minden vasárnap 10:00 órakor frissítést futtat

45 10 * * sun root apt-get -y frissítés

A root felhasználó frissítést futtat minden vasárnap (vasárnap) 10: 45-kor

30 7 20 11 * felhasználó /home/usuario/scripts/update.sh

November 20-án 7: 30-kor a felhasználó futtatja a szkriptet

30 7 11 11 napfelhasználó /home/usuario/scripts/pastel_con_velitas.sh

November 11-én 7: 30-kor és vasárnap a felhasználó megünnepli a rendszergazdáját (vagyis engem)

01 * * * * felhasználó /home/usuario/scripts/molestorecordatorio.sh

Bosszantó emlékeztető minden nap minden órájának minden percében (NEM ajánlott).

Még kezelhetők speciális tartományok:

30 17 * * 1,2,3,4,5

Hétfőtől péntekig minden nap délután fél 5-kor.

00 12 1,15,28

Minden hónap első, tizenötödik és 12. napján 28 órakor (ideális bérszámfejtéshez)

Ha ez zavaró, akkor a crontab fogantyúkat speciális húrok e tartományok meghatározásához.

@reboot Futtasd egyszer, indításkor
@ évente csak évente egyszer fut: 0 0 1 1 *
@évente ugyanaz, mint @évesen
@havi havonta egyszer, az első napon: 0 0 1 * *
@weekly Weekly a hét első órájának első perce. 0 0 * * 0 ″.
@ naponta naponta, 12: 00-kor. 0 0 * * *
@ midnight ugyanaz, mint @daily
@ óránként minden óra első percében: 0 * * * *

Használata nagyon egyszerű.

@hourly felhasználó /home/user/scripts/molestorecordatorio.sh @havi felhasználónk /home/user/scripts/backup.sh @dain root

Végül, de nem utolsó sorban:

Cron munkakezelés

crontab fájl

Cserélje ki a meglévő crontab fájlt egy felhasználó által definiált fájlra

crontab -e

Szerkessze a felhasználó crontab fájlját, minden új sor új crontab feladat lesz.

crontab -l

Sorolja fel a felhasználó összes crontab feladatát

crontab -d

Törölje a felhasználó crontab-ját

crontab -c dir

Meghatározza a felhasználó crontab könyvtárát (ennek felhasználói írási és végrehajtási jogosultságokkal kell rendelkeznie)

crontab -u felhasználó

előtag egy másik felhasználó crontab-jának kezelésére, példák:

$ sudo crontab -l -u gyökér $ sudo crontab -e user2 #crontab -d -u felhasználó

Ez az eszköz, csakúgy, mint sok más, mélyebben és részletesebben megtekinthető:

Köszönöm Lucain!

48 hozzászólás, hagyd a tiedet

Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   Alvaro Ortiz helyőrző kép dijo

    Uh ... kissé zavaros.

  2.   tonic dijo

    * / 30 hiányzik (a perc mezőben), amely 30 percenként fut ...

    1.    erm3nda dijo

      Csak ezt akartam kommentálni, amíg úgy döntöttem, hogy átnézem a kommenteket comments
      Ez a módosító nagyon fontos információ és nagyon hasznos dolog.

      1.    Kika dijo

        Hello!
        Most 45 percenként tesztelek egy konfigurációt.

        * / 45 * * * *, és az utasításokat minden óra 45 percében, ÉS óránként hajtják végre. Vagyis:

        3: 45-kor, majd 4: 00-kor, 4: 45-kor, majd 5:00, 5:45, 6: 00, 6: 45-kor stb.

        Valami bajom van? Mit tehetek úgy, hogy csak 45 percenként, vagy legalább egyszer 45 percenként óránként.

    2.    Kika dijo

      Hello!
      Most 45 percenként tesztelek egy konfigurációt.

      * / 45 * * * *, és az utasításokat minden óra 45 percében, ÉS óránként hajtják végre. Vagyis:

      3: 45-kor, majd 4: 00-kor, 4: 45-kor, majd 5:00, 5:45, 6: 00, 6: 45-kor stb.

      Valami bajom van? Mit tehetek úgy, hogy csak 45 percenként, vagy legalább egyszer 45 percenként óránként.

  3.   Laza dijo

    Helló, szuper hasznos információk a cron működésének tisztázására.
    Bytes

  4.   Laza dijo

    *

  5.   Vadász dijo

    Kiváló, köszönöm, hogy tisztázta a cron működését .. tegyünk egy kis kezet 🙂

  6.   Jacob dijo

    Ezt a sort, ahogy értem, 10: 15-kor hajtják végre, javítson ki, ha tévedek
    Nos, ez azt írja: 10:15
    15 22 * * * felhasználó /home/user/scripts/update.sh

  7.   Agustin dijo

    Helló! nagyon jó infó.
    Félóránként egy szkript futtatásához a következő sort kell hozzáadni a CronTab-hoz: "30 * * * * root Scrip.sh" Helyes? Nagyon szépen köszönöm!

  8.   használjuk a linuxot dijo

    Nem. Ha jól emlékszem, ehhez meg kell adnod a / 30 * * * * root Scrip.sh fájlt.
    Vagyis adjuk hozzá a / előtt 30-at.
    Egészségére! Pál.

  9.   Jonatán dijo

    Helló Tetszett a bejegyzésed, nagyon teljes, de szerettem volna kérdezni valamit.
    Problémáim vannak ezzel a paranccsal, és olyan, mint az "at".

    Szeretnék futtatni egy szkriptet egy bizonyos időpontban, és feltenni

    at -f /home/mi_user/Desk/script.sh 18:08 példa

    és a parancsfájl nem a képernyőn, vagyis a terminálon fut, a háttérben fut?

    És a cronnal ugyanez történik velem, a "crontab -e" -vel szerkesztem a crontab fájlt

    a végén hozzáadom ezt a sort:

    46 19 my_user /home/mi_user/Desk/script.sh

    és nem csinál semmit, nem mutatja a forgatókönyvet.

    Bármilyen javaslat? Köszönöm szépen, és elnézését a kellemetlenségért

    1.    használjuk a linuxot dijo

      A terminál megjelenéséhez előfordulhat, hogy futtatnia kell a terminált, és paraméterként át kell adnia a parancsfájlt.

      Például:

      lxterminal -e "my_user /home/mi_user/Desktop/script.sh"

      A használandó paraméter az Ön által használt terminálemulátortól függően változhat.

      Remélem működik.

      Ölelés! Pál.

  10.   patréták dijo

    A hozzájárulást értékelik.

    10 pont !!

    hello2!!

  11.   Rodolfo dijo

    Nagyon köszönöm, nagyon sokat segített tisztázni néhány dolgot, teljes köszönet, további részletekért vagy kérdésekért a FÉRFI OLDALRA megyek, ismételt üdvözletet.

  12.   Jahir dijo

    ember nagyon köszönöm, olvastam és teszteltem a példákat. nagyon köszönöm ... nagyon érthető. Egészségére

  13.   geovanni dijo

    Az ubuntu Server 12.04.2 LTS-t használtam, és a crontab verzióval rendelkezem, hogy töröljem a felhasználói feladatok listáját, a crontab -r (és -l, ahogy ez a kézikönyv mondja). Biztos, hogy verziók kérdése.

    Másrészt egyszer csak a crontab-ot futtattam, és ez a fajta módszer engedte, hogy létrehozzam a saját végrehajtási fájlomat, de nem ezt hajtották végre. Ami fut, az az / etc / crontab fájlban található. talán valaki felhasználja a megjegyzést.

    PS (a locate és a whereis crontab segítségével keresek, de csak a fent említett címet és egy másik titkosított fájlt adott vissza, tehát ha az / etc / crontab könyvtárban található, de a crontab -e parancs végrehajtásakor az enyém jelent meg az összes általam definiált feladattal) hol tárolták ezt a fájlt '???? Üdvözlettel. Mindig rootokkal jelentkezem be.

  14.   Sebastian dijo

    Kiváló, nagyon hasznos !!!

  15.   mmm dijo

    Helló, ezt szeretném megtenni ………… «15 10 * * * root ifdown eth0»

    vagyis egy bizonyos időpontban a hálózati kártya kikapcsol ... ... Nos, betettem a crontab-ba, és nem működött ... ... mi van?

    Saludos y Gracias

  16.   Miguel dijo

    Hiányzott a "mon" meghatározása a "Feladatok hozzáadása a crontab-hoz" cím után

    A cikk még mindig szép, a cron rendkívül hasznos.

  17.   Oscar dijo

    Milyen klassz volt ez a jó bejegyzés, kérdezz tőlem
    Ha nyomon akarom tartani a feladatok végrehajtása során hagyott rekordokat, hol láthatom?

    decdir. Szeretném megtekinteni a fájl múltjában végrehajtott műveletek előzményeit, és azt, hogy ki módosította a dátumot

    gracias

  18.   oscar dijo

    Ennek módosítási előzményeit szeretném ellenőrizni

    hogy tudom megcsinálni

    gracias

  19.   Andres Ledo dijo

    Jó reggelt,

    Azt hiszem, hogy az ubuntu szkriptben hibát követett el, az ap-get -y upgrade-et az apt-get -y upgrade helyett tette. (Hagytál egy t-t).

    A köszöntés.

    1.    használjuk a linuxot dijo

      Így van. Köszönöm!
      Ölelés! Pál

  20.   Gabriel dijo

    Szeretném tudni, hogyan lehet létrehozni egy cron fájlt, hogy meg lehessen határozni a végrehajtás időpontját, a könyvtárat stb.

  21.   Valentin dijo

    Köszönjük, hogy tisztázta a műveletet és a cron alapvető parancsait, hogy most szórakoztassa magát egy kicsit.

  22.   Sander dijo

    Amikor információt keresek a Gnu / Linux bármely témájáról, körbe-körbe járok, hogy az esetek 90% -ában mindig megtaláljam a legjobb oktatóanyagot ebben a nagy közösségben, úgy gondolom, hogy mostantól kezdem itt, majd máshol.

    Üdvözlet

    1.    használjuk a linuxot dijo

      Köszönöm Sander! Egy ölelés! Pál.

  23.   dario dijo

    dom = a hónap napja
    dow = a hét napja
    könnyebb, ha társulsz

  24.   Húsvéti dijo

    Köszönöm szépen, nagyon teljes és jól megmagyarázott.

  25.   Maxilla dijo

    Ugyanezt adta nekünk az OS-tanárom, én nem változtatok semmit, most látom, miért olyan rossz az osztály .-. Nos, ez ugyanaz, mint a házi feladat xD

  26.   Marcelo dijo

    Becsült,

    Lekérdezés, korlátozható-e egy feladat időtartama?
    Például van egy olyan feladatom, amely 5 percenként megismétlődik, ismétléskor, ha a feladat még mindig aktív, ölje meg és futtassa újra.

    Köszönöm,
    Marcelo.-

    1.    használjuk a linuxot dijo

      Helló, Marcelo!

      Szerintem jobb lenne, ha ezt a kérdést felvetnéd a hívott kérdés-válasz szolgálatunkban Kérdez DesdeLinux hogy az egész közösség segíthessen a problémájában.

      Egy ölelés, Pablo.

  27.   aj dijo

    jó poszt.
    Mi a terminálonkénti parancs a feladatok hozzáadásához a crontab-ba (anélkül, hogy beírná a crontab-ot, és manuálisan hozzáadná őket a „crontab -e” -hez, vagy a crontab-ot egy másik crontab-ra cserélné le a „crontab file” -ra).
    Az ötlet egy külső szkript létrehozása, amely hozzáadja a feladatokat a crontab-hoz
    Köszönöm

    1.    david dijo

      számomra úgy tűnik, hogy használhatna 'visszhangot', amit csak hozzá akar adni '| macska >> 'cronotab elérési útja (/ etc / cronotab)' «

  28.   Raphael Vera dijo

    Hogyan futna egy kifejezés pontosan 3 naponta

  29.   José Antonio dijo

    Hello.

    Problémám van egy cron munka végrehajtásával.

    A következő feladatot futtatom cronta -e-vel:

    01 * * * * root /home/user/script/mfile.sh

    de a feladat nem teljesül. Ellenőriztem, hogy a myfile.sh rendelkezik-e végrehajtási engedéllyel, és hogy az azt végrehajtó felhasználó root-e.

    Ugyanazt a feladatot futtatom az / etc / crontab fájlban, és a szolgáltatás újraindítása után nekem sem működik.
    A myfile.sh tartalma egy parancs, amely frissíti a DB-t, és ha a konzolon futtatom, akkor működik.
    van valami ötlet, mi lehet a probléma?

    1.    fredd dijo

      Előfordulhat, hogy az adatbázis felhasználó nem rendelkezik minden jogosultsággal, és először a környezeti változókat kell exportálnia az adatbázis motorjából.
      Például a db2-ben ez a sor a szkript elejére kerül
      . / home / db2inst1 / sqllib / db2profile

      Egy másik ok az lehet, hogy a szkript megköveteli az adatbázishoz való kapcsolódást, a szkripten belül hozza létre a kapcsolatot az adatbázissal

  30.   LA3 dijo

    Nem tudtam, hogy újra kell indítanom a tavat, egy ideje ezzel küzdöttem

  31.   Kenya dijo

    Tudni fogják, hogyan kell jelezni, hogy a feladatot a hónap minden végén, a megjelölt időpontban futtatják .. A részlet az, hogy nem tudom elérni, mivel tudom, hogy minden hónap utolsó napjára szükség van .. ??? Egyenként kellett leírnom őket, de amikor eljön a február hónap vége, hogy bicikli ez nekem bonyolult ..

  32.   Jézus dijo

    jó nap!!

    Hogyan állíthatom meg a crontab-ban végrehajtott folyamatot?

  33.   Jézus dijo

    folyamat * …………

  34.   Julianna dijo

    Lehet, hogy tudsz nekem segíteni? eu tenho um szkript, amelyet Minha írt, amely nem működik, nincs crontab! Jб dei az összes megengedett, nem egy konkrét cron vagy felhasználó, aki végre tudja hajtani - semmi sem történik! Szeretném tudni, tud-e segíteni nekem, néhány más dolog nem működik! Vlws

  35.   Anthox dijo

    Hogyan tenné fel a feladatot a hónap minden utolsó napján (napokon: 31-30-28)?

  36.   tfercho dijo

    Mint már tudják, a su paranccsal módosíthatják a felhasználókat egy konzolon. Ha a su parancsot így használom: "a felhasználóod" megváltoztatja a felhasználót, de a "felhasználó" megfelelő beállításai nélkül, ha a su-t futtatom: "su - felhasználó", akkor a felhasználói beállítások betöltésével változtassam meg a felhasználót. A cron segítségével jelzem a felhasználót, de hogyan tölthetem be a felhasználó konfigurációit?

  37.   Rabol dijo

    És ha le akarom állítani?

  38.   regi dijo

    Helló,
    Nem tudom, mit csinálok rosszul, de követem a lépéseket, és semmi sem kerül végrehajtásra. Megpróbáltam:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    és egyáltalán semmi. Nem hajt végre semmit. Újraindítottam és mindent.

  39.   Ferqos dijo

    köszönöm szépen