Cron & crontab, vysvetlil

Lucaine vydal pred chvíľou vynikajúci návod na cron a crontab o ktorom si myslím, že stojí za zdieľanie. Cron je akýmsi ekvivalentom Naplánovaných úloh vo Windows, iba to, že sa vybavuje z terminálu. Tí, ktorí uprednostňujú vizuálne rozhranie na dosiahnutie rovnakého cieľa, sa o tom môžu presvedčiť ďalší článok.

Čo je to cron?

Názov cron pochádza z gréckeho chronos, čo znamená „čas“. V operačnom systéme Unix je cron bežným správcom procesov na pozadí (daemon), ktorý spúšťa procesy alebo skripty v pravidelných intervaloch (napríklad každú minútu, deň, týždeň alebo mesiac). Procesy, ktoré sa majú spustiť, a čas, ktorý by sa mali spustiť, sú uvedené v súbore crontab.

Ako to funguje

Démon cron začína od /etc/rc.d/ o /etc/init.d v závislosti od distribúcie. Cron beží na pozadí a každú minútu kontroluje tabuľku úloh crontab / Etc / crontab v / var / cievka / cron pri hľadaní úloh, ktoré sa majú splniť. Ako užívateľ môžeme do cron pridávať príkazy alebo skripty s úlohami na automatizáciu niektorých procesov. To je užitočné napríklad na automatizáciu aktualizácie systému alebo dobrého zálohovacieho systému.

Súvisiaci článok:
Výukový program: Inštalácia balíkov .tar.gz a .tar.bz2

Čo je Crontab?

Crontab je jednoduchý textový súbor, ktorý obsahuje zoznam príkazov, ktoré sa majú vykonať v čase určenom používateľom. Crontab overí dátum a čas vykonania skriptu alebo príkazu, povolenia na vykonávanie a urobí to na pozadí. Každý používateľ môže mať svoj vlastný súbor crontab, v skutočnosti súbor / Etc / crontab predpokladá sa, že ide o súbor crontab používateľa root, keď bežní používatelia (a dokonca aj root) chcú vygenerovať svoj vlastný súbor crontab, použijeme príkaz crontab.

Crontab je najjednoduchší spôsob správy úloh cron na systémoch viacerých používateľov, a to buď ako jednoduchý užívateľ systému, alebo ako root.

Používanie crontabu

Začíname s jednoduchým príkladom.

Chystáme sa automatizovať aktualizáciu systému, aby sme odstránili nepríjemné „Vždy musím aktualizovať a to sa mi nepáči!

ako
Súvisiaci článok:
Príkazy na poznanie systému (identifikácia hardvéru a niektorých softvérových konfigurácií)

Najskôr urobíme scenár. Tento skript sa bude volať cron a bude obsahovať všetky pokyny, ktoré chceme urobiť, preto je potrebné ho pred zahrnutím do cron vyskúšať v niekoľkých prípadoch a niekoľkými spôsobmi, napríklad takto:

#! / bin / bash # príklad aktualizácie skriptu # vyberte svoju distribúciu # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Odstráňte # z vašej distribučnej linky. V prípade, že ide o Ubuntu / Debian, začína sa na apt-get.

Ukladáme skript ako update.sh (napr. Adresár skriptov domov). Povolenia na spustenie uvedeného skriptu meníme pomocou:

chmod a + x ~ / scripts / update.sh

Skript spustíme niekoľkokrát, aby sme si overili, že všetko beží hladko, upravujeme, čo je potrebné (nesmie obsahovať chyby, inak cron chybu opakuje iba znova a znova). Teraz pridajte úlohu do našej tabuľky.

Pridajte úlohy na crontab

Vydanie crontabu vykonáme pomocou crontab -e, v niektorých distrách (napríklad ubuntu) nám dáva možnosť zvoliť si požadovaný textový editor, zvyšok nám ostane na vi. Súbor crontab bude vyzerať asi takto.

# mh dom mon dow príkaz používateľa

kde:

  • m zodpovedá minúte, kedy bude skript vykonaný, hodnota sa pohybuje od 0 do 59
  • h presný čas, spracováva sa 24-hodinový formát, hodnoty sa pohybujú od 0 do 23, pričom 0 je o 12:00 polnoci.
  • dom označuje deň v mesiaci, napríklad môžete určiť 15, ak chcete spustiť každých 15 dní
  • dow znamená deň v týždni, môže to byť číselný údaj (0 až 7, kde 0 a 7 sú nedele) alebo prvé 3 písmená dňa v angličtine: po, ut, st, štv, pia, sat, slnko.
  • užívateľ definuje používateľa, ktorý vykoná príkaz, môže to byť root alebo iný používateľ, pokiaľ má oprávnenie na vykonávanie skriptu.
  • povel odkazuje na príkaz alebo absolútnu cestu k skriptu, ktorý sa má vykonať, napríklad: /home/usuario/scripts/update.sh, ak volá skript, musí byť spustiteľný

Aby bolo jasné, vysvetlíme niekoľko príkladov úloh cron:

15 10 * * * užívateľ /home/user/scripts/update.sh

Skript update.sh bude spustený každý deň o 10:15

15 22 * * * užívateľ /home/user/scripts/update.sh

Skript update.sh bude spustený každý deň o 10:15

00 10 * * 0 root apt-get -y update Užívateľ root

Aktualizáciu spustí každú nedeľu o 10:00

45 10 * * aktualizácia slnečných koreňov apt-get -y

Používateľ root bude aktualizáciu spúšťať každú nedeľu (ne) o 10:45

30 7 20 11 * užívateľ /home/usuario/scripts/update.sh

20. novembra o 7:30 používateľ spustí skript

30 7 11 11 používateľ slnka /home/usuario/scripts/pastel_con_velitas.sh

11. novembra o 7:30 a to je nedeľa, používateľ oslávi svojho sysadmina (teda mňa)

01 * * * * užívateľ /home/usuario/scripts/molestorecordatorio.sh

Nepríjemné pripomenutie každú minútu každú hodinu každý deň (NIE sa odporúča).

Stále sa s nimi dá manipulovať špeciálne rozsahy:

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

O 5:30 popoludní každý deň od pondelka do piatku.

00 12 1,15,28 * *

Každý prvý, pätnásty a 12. deň v 28 hodín o poludní (ideálne pre mzdy)

Ak je to mätúce, manipuluje sa s crontabom špeciálne reťazce na definovanie týchto rozsahov.

@ reboot Spustiť raz, pri štarte
@rok beží iba raz ročne: 0 0 1 1 *
@ ročne rovnaké ako @ rok
@mesačník beží raz mesačne, prvý deň: 0 0 1 * *
@týždenne prvá minúta prvej hodiny v týždni. 0 0 * * 0 ″.
@ denne každý deň, o 12:00 0 0 * * *
@ polnoc rovnaké ako @ denne
@hodina v prvej minúte každej hodiny: 0 * * * *

Jeho použitie je veľmi jednoduché.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @ denný root apt-get update && apt-get -y upgrade

V neposlednom rade:

Správa úloh Cron

súbor crontab

Nahraďte existujúci súbor crontab súborom definovaným používateľom

crontab -e

Upravte súbor crontab používateľa, každý nový riadok bude novou úlohou crontab.

crontab -l

Uveďte zoznam všetkých úloh používateľa na krontabe

crontab -d

Odstráňte používateľskú kartu

crontab -c r

Definuje adresár používateľa crontab (musí mať oprávnenie používateľa na zápis a vykonávanie)

crontab -u užívateľ

predpona na spracovanie karty iného používateľa, príklady:

$ sudo crontab -l -u root $ sudo crontab -e užívateľ2 #crontab -d -u užívateľ

Tento nástroj, rovnako ako mnoho iných, je možné vidieť podrobnejšie a podrobnejšie v:

Vďaka Lucain!

48 komentáre, nechajte svoj

Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   Zástupný obrázok pre Alvaro Ortiz dijo

    Uf ... trochu mätúce.

  2.   tonikum dijo

    * / 30 chýba (v poli minút), ktoré beží každých 30 minút ...

    1.    erm3nda dijo

      Iba som sa k tomu chystal vyjadrovať, kým som sa rozhodol komentáre preskúmať 😀
      Tento modifikátor je veľmi dôležitá informácia a niečo veľmi užitočné.

      1.    Kika dijo

        Dobrý deň!
        Momentálne testujem konfiguráciu každých 45 minút.

        * / 45 * * * * a inštrukcia sa vykoná v 45 minútach každú hodinu A každú hodinu. To znamená:

        Beží o 3:45, potom o 4:00, 4:45, potom o 5:00, 5:45, 6:00, 6:45 atď.

        Mám niečo zlé? Čo môžem urobiť, aby to bolo každých 45 minút alebo aspoň raz za 45 minút každú hodinu.

    2.    Kika dijo

      Dobrý deň!
      Momentálne testujem konfiguráciu každých 45 minút.

      * / 45 * * * * a inštrukcia sa vykoná v 45 minútach každú hodinu A každú hodinu. To znamená:

      Beží o 3:45, potom o 4:00, 4:45, potom o 5:00, 5:45, 6:00, 6:45 atď.

      Mám niečo zlé? Čo môžem urobiť, aby to bolo každých 45 minút alebo aspoň raz za 45 minút každú hodinu.

  3.   Voľný dijo

    Ahoj, super užitočné informácie na objasnenie toho, ako funguje cron.
    Bytes

  4.   Voľný dijo

    pre *

  5.   lovec dijo

    Výborne, ďakujem za objasnenie toho, ako funguje cron .. dajme malú ruku 🙂

  6.   Jakub dijo

    Pokiaľ chápem tento riadok, bude vykonaný o 10:15, opravte ma, ak sa mýlim
    No a tam sa píše o 10:15
    15 22 * * * užívateľ /home/user/scripts/update.sh

  7.   Agustin dijo

    Ahoj! velmi dobre info.
    Ak chcete spustiť skript každú pol hodinu, mal by sa na CronTab pridať riadok: „30 * * * * root Scrip.sh“ Správne? Ďakujem ti veľmi pekne!

  8.   pouzivajme linux dijo

    Nie. Ak si dobre pamätám, musíš dať / 30 * * * * root Scrip.sh.
    To znamená, pridať / pred 30.
    Na zdravie! Pavla.

  9.   Jonathan dijo

    Dobrý deň, páčil sa mi váš príspevok, je veľmi kompletný, ale chcel som sa vás niečo opýtať.
    Mám problémy s týmto príkazom a jedným ako „zavináč“.

    Chcem spustiť skript v určitom čase a dať

    na príklade -f /home/mi_user/Desk/script.sh 18:08

    a skript sa nevykonáva na obrazovke, to znamená v termináli, je vykonávaný na pozadí?

    A s cronom sa mi stane to isté, upravím súbor crontab pomocou „crontab -e“

    na koniec pridám tento riadok:

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

    a neurobí nič, nezobrazí scenár.

    Nejaké návrhy? Ďakujem pekne a ospravedlňujem sa za prípadné nepríjemnosti

    1.    pouzivajme linux dijo

      Aby sa terminál mohol zobraziť, bude pravdepodobne potrebné spustiť terminál a odovzdať skript ako parameter.

      Napríklad:

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

      Parameter, ktorý sa má použiť, sa môže líšiť v závislosti od použitého terminálového emulátora.

      Dúfam, že sa to podarí.

      Objať! Pavla.

  10.   patretky dijo

    Príspevok sa cení.

    10 bodov !!

    salu2!!

  11.   Rodolfo dijo

    Ďakujem pekne, veľmi mi pomohlo objasniť niektoré veci, celková vďaka, za ďalšie podrobnosti alebo pochybnosti pôjdem na STRÁNKU MUŽ, opätovne pozdravujem.

  12.   jahir dijo

    Ujo veľmi pekne ďakujem, čítal som a testoval príklady. dakujem pekne ... je to velmi pochopitelne. Na zdravie

  13.   Geovanni dijo

    Použil som ubuntu Server 12.04.2 LTS a na odstránenie zoznamu úloh používateľa sa používa verzia crontab, ktorú mám, crontab -r (a -l, ako hovorí táto príručka). Iste, je to otázka verzií.

    Na druhej strane som kedysi bežal iba crontab a tento druh mi dovolil vytvoriť si vlastný exekučný súbor, ale nebol to ten, ktorý sa práve vykonával. Ten, ktorý beží, je ten v / etc / crontab. možno niekto použije komentár.

    PS (hľadám pomocou locate a whereis crontab, ale vrátila iba vyššie uvedenú adresu a ďalší súbor, ktorý je šifrovaný, takže ak bol vykonaný ten v / etc / crontab, ale pri vykonaní príkazu crontab -e sa objavil môj so všetkými úlohami, ktoré som definoval), kde bol tento súbor uložený '???? S pozdravom. Vždy sa prihlásim pomocou root.

  14.   Sebastian dijo

    Vynikajúce, veľmi užitočné !!!

  15.   mmm dijo

    Dobrý deň, rád by som to urobil ................. 15 10 * * * root ifdown eth0 »

    to znamená, že v určitom čase sa sieťová karta vypne .......... dobre, vložil som ju do crontabu a nefungovalo to ... čo sa deje?

    Saludos y gracias

  16.   Miguel dijo

    Vynechali ste definíciu „mon“ za názvom „Pridať úlohy do crontabu“

    Článok je stále pekný, cron je mimoriadne užitočný.

  17.   Oscar dijo

    Aký super bol ten dobrý príspevok, opýtajte sa ma
    Ak chcem sledovať záznamy, ktoré zostali po vykonaní úloh, kde ich môžem vidieť?

    je rozhodnúť sa, že chcem vidieť históriu akcií vykonaných v minulosti tohto súboru a chcem vidieť, kto to zmenil, a dátum

    vďaka

  18.   Oskar dijo

    Chcem skontrolovať históriu zmien

    ako to mozem urobit

    vďaka

  19.   Andres Ledo dijo

    Dobré ráno,

    Myslím si, že v skripte ubuntu ste urobili chybu, že ste namiesto apt-get -y upgrade umiestnili aktualizáciu ap-get -y. (Nechali ste t).

    Pozdrav.

    1.    pouzivajme linux dijo

      Takže je. Ďakujem!
      Objať! Pavla

  20.   gabriel dijo

    Chcem vedieť, ako vytvoriť súbor cron, aby som mohol určiť čas zakaždým, keď sa vykonáva, adresár atď.

  21.   Valentin dijo

    Ďakujeme za objasnenie operácie a základné príkazy pre cron. Teraz sa trochu zabavte.

  22.   Sander dijo

    Kedykoľvek hľadám informácie o akejkoľvek téme týkajúcej sa Gnu / Linuxu, idem dokola a vždy nájdem v 90% prípadov najlepší návod v tejto skvelej komunite, myslím si, že odteraz začnem tu a potom inde.

    pozdravy

    1.    pouzivajme linux dijo

      Vďaka Sander! Objatie! Pavla.

  23.   dario dijo

    dom = deň v mesiaci
    dow = deň v týždni
    je to jednoduchšie, ak sa združuješ

  24.   veľkonočné dijo

    Ďakujem veľmi pekne, veľmi kompletne a dobre vysvetlené.

  25.   Maxilla dijo

    To je to isté, čo nám dal môj učiteľ operačných systémov, nič nemením, teraz vidím, prečo je trieda taká zlá.-.

  26.   marcelo dijo

    Odhadovaný,

    Dotaz, je možné obmedziť trvanie úlohy?
    Napríklad mám úlohu, ktorá sa opakuje každých 5 minút, pri opakovaní, ak je táto úloha stále aktívna, ju zabi a znovu spusti.

    Vďaka,
    Marcelo.-

    1.    pouzivajme linux dijo

      Ahoj, Marcelo!

      Myslím, že by bolo lepšie, keby ste túto otázku položili v našej volacej službe pre otázky a odpovede Požiadať DesdeLinux aby vám celá komunita mohla pomôcť s vašim problémom.

      Objatie, Pablo.

  27.   aj dijo

    dobrý príspevok.
    Aký je príkaz na terminál na pridanie úloh do crontabu (bez zadania do crontabu a ich manuálneho pridania pomocou „crontab -e“ alebo nahradenia crontabu iným crontabom „súborom crontab“).
    Cieľom je vytvoriť externý skript na pridanie úloh do tabuľky crontab
    vďaka

    1.    david dijo

      Myslím, že by ste mohli použiť "echo", čo chcete pridať '| mačka >> 'cesta k cronotabe (/ etc / cronotab)' «

  28.   Raphael Vera dijo

    Ako by výraz bežal presne každé 3 dni

  29.   José Antonio dijo

    Dobrý deň.

    Mám problém s vykonaním úlohy cron.

    Spustím nasledujúcu úlohu s cronta -e:

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

    ale úloha nie je splnená. Overil som, že myfile.sh má povolenie na vykonávanie a že používateľ, ktorý ho vykonáva, je root.

    Rovnakú úlohu spúšťam v / etc / crontab a po reštarte služby mi to tiež nejde.
    Obsah myfile.sh je príkaz, ktorý aktualizuje DB a ak ho spustím v konzole, funguje.
    vôbec netušíš, v čom môže byť problém?

    1.    Freddy dijo

      Je pravdepodobné, že užívateľ databázy nemá všetky oprávnenia a najskôr budete musieť exportovať premenné prostredia z vášho databázového stroja.
      Napríklad v db2 by tento riadok prešiel na začiatok skriptu
      . / home / db2inst1 / sqllib / db2profile

      Ďalšou príčinou môže byť to, že skript vyžaduje pripojenie k databáze. Pripojte sa k databáze v rámci skriptu

  30.   LA3 dijo

    Nevedel som, že musím crond reštartovať, chvíľu som s tým bojoval

  31.   Keňa dijo

    Budú vedieť, ako naznačiť, že úloha je spustená každý koniec mesiaca, v uvedenom čase. Podrobnosťou je, že nemôžem dosiahnuť, ako viem, že bude trvať posledný deň každého mesiaca .. ??? Musel som si ich po jednom zapisovať, ale keď príde koniec mesiaca február, že je to biciesto, je to pre mňa komplikované ..

  32.   Ježiš dijo

    dobrý deň!!

    Ako zastavím proces, ktorý sa vykonáva v databáze crontab?

  33.   Ježiš dijo

    proces * …………

  34.   Julianna dijo

    Je možné, že mi môžete pomôcť? scenár eu tenho um od autora minha, ktorý nefunguje, žiadny crontab! jб dei všetky povolenia, žiadny súkromný konkrétny klient alebo používateľ, ktorý to môže vykonať - väčšinou sa nič nestane! Chcel by som vedieť, či mi môžete pomôcť, niektoré iné veci fungujú bez cronu! Vlws

  35.   Anthox dijo

    Ako by ste zadali úlohu, ktorá sa má spustiť každý posledný deň v mesiaci (dni: 31-30-28)?

  36.   tfercho dijo

    Ako už viete, príkaz su sa používa na zmenu používateľa v konzole. Ak použijem príkaz su takto: "váš užívateľ" zmení užívateľa, ale bez správneho nastavenia "user", ak spustím su ako: "su - user" zmení užívateľa načítaním užívateľských nastavení. Pomocou cron označím používateľa, ale ako načítam nastavenia tohto používateľa?

  37.   Okradnúť dijo

    A ak to chcem zastaviť?

  38.   regi dijo

    Dobrý deň,
    Neviem, čo robím zle, ale postupujem podľa krokov a nič sa nevykonáva. Skúsil som:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    a vobec nic. Nič nevykonáva. Reštartoval som a všetko.

  39.   Ferqos dijo

    ďakujem moc