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. |
Index
Č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.
Č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!
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:
48 komentáre, nechajte svoj
Uf ... trochu mätúce.
* / 30 chýba (v poli minút), ktoré beží každých 30 minút ...
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é.
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.
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.
Ahoj, super užitočné informácie na objasnenie toho, ako funguje cron.
Bytes
pre *
Výborne, ďakujem za objasnenie toho, ako funguje cron .. dajme malú ruku 🙂
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
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!
Nie. Ak si dobre pamätám, musíš dať / 30 * * * * root Scrip.sh.
To znamená, pridať / pred 30.
Na zdravie! Pavla.
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
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.
Príspevok sa cení.
10 bodov !!
salu2!!
Ď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.
Ujo veľmi pekne ďakujem, čítal som a testoval príklady. dakujem pekne ... je to velmi pochopitelne. Na zdravie
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.
Vynikajúce, veľmi užitočné !!!
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
Vynechali ste definíciu „mon“ za názvom „Pridať úlohy do crontabu“
Článok je stále pekný, cron je mimoriadne užitočný.
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
Chcem skontrolovať históriu zmien
ako to mozem urobit
vďaka
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.
Takže je. Ďakujem!
Objať! Pavla
Chcem vedieť, ako vytvoriť súbor cron, aby som mohol určiť čas zakaždým, keď sa vykonáva, adresár atď.
Ďakujeme za objasnenie operácie a základné príkazy pre cron. Teraz sa trochu zabavte.
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
Vďaka Sander! Objatie! Pavla.
dom = deň v mesiaci
dow = deň v týždni
je to jednoduchšie, ak sa združuješ
Ďakujem veľmi pekne, veľmi kompletne a dobre vysvetlené.
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á.-.
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.-
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 Spýtajte sa FromLinuxu aby vám celá komunita mohla pomôcť s vašim problémom.
Objatie, Pablo.
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
Myslím, že by ste mohli použiť "echo", čo chcete pridať '| mačka >> 'cesta k cronotabe (/ etc / cronotab)' «
Ako by výraz bežal presne každé 3 dni
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?
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
Nevedel som, že musím crond reštartovať, chvíľu som s tým bojoval
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é ..
dobrý deň!!
Ako zastavím proces, ktorý sa vykonáva v databáze crontab?
proces * …………
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
Ako by ste zadali úlohu, ktorá sa má spustiť každý posledný deň v mesiaci (dni: 31-30-28)?
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?
A ak to chcem zastaviť?
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.
ďakujem moc