Zkušený správce systému Linux ví, jak důležité je automatické spouštění úloh rutinní údržby na pozadí.
Utilita Linux Cron je efektivní způsob, jak naplánovat rutinní úlohy na pozadí na konkrétní čas a/nebo den na průběžné bázi.
Tento článek je součástí probíhající série Tipy pro produktivitu pro nadšence. V tomto článku se podíváme na 15 úžasných příkladů plánování úloh crontab.
Formát Linux Crontab
MIN HOUR DOM MON DOW CMD
Pole | Popis | Povolená hodnota |
---|---|---|
MIN | Pole minuty | 0 až 59 |
HODINA | Pole hodin | 0 až 23 |
DOM | Den v měsíci | 1–31 |
PO | Pole Měsíc | 1–12 |
DOW | Den v týdnu | 0–6 |
CMD | Příkaz | Jakýkoli příkaz, který se má provést. |
1. Naplánování úlohy na konkrétní čas
Základní použití cronu je provést úlohu v konkrétním čase, jak je uvedeno níže. Tím se spustí skript Úplná záloha (úplná záloha) 10. června 08:30 .
Upozorňujeme, že časové pole používá 24hodinový formát. Takže pro 8:00 použijte 8 a pro 20:00 použijte 20.
30 08 10 06 * /home/ramesh/full-backup
- 30 – 30. minuta
- 08 – 08:00
- 10 – 10. den
- 06 – 6. měsíc (červen)
- * – Každý den v týdnu
2. Naplánujte si úlohu na více než jednu instanci (např. dvakrát denně)
Následující skript provádí přírůstkovou zálohu dvakrát denně každý den.
V tomto příkladu se každý den v 11:00 a 16:00 spustí zadaný skript shellu přírůstkové zálohy (incremental-backup). Hodnota oddělená čárkami v poli určuje, že příkaz musí být proveden po celou uvedenou dobu.
00 11,16 * * * /home/ramesh/bin/incremental-backup
- 00 – 0. minuta (horní část hodiny)
- 11,16 – 11:00 a 16:00
- * – Každý den
- * – Každý měsíc
- * – Každý den v týdnu
3. Naplánujte si úlohu na konkrétní časový úsek (např. pouze ve všední dny)
Pokud chcete, aby byla úloha naplánována na každou hodinu v určitém časovém rozmezí, použijte následující.
Cron Job každý den během pracovní doby
Tento příklad kontroluje stav databáze každý den (včetně víkendů) v pracovní době 9:00 – 18:00
00 09-18 * * * /home/ramesh/bin/check-db-status
- 00 – 0. minuta (horní část hodiny)
- 09–18 – 9:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00
- * – Každý den
- * – Každý měsíc
- * – Každý den v týdnu
Cron Job každý pracovní den během pracovní doby
Tento příklad kontroluje stav databáze každý všední den (tj. kromě So a Ne) v pracovní době 9:00 – 18:00
00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
- 00 – 0. minuta (horní část hodiny)
- 09–18 – 9:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00
- * – Každý den
- * – Každý měsíc
- 1–5 -Po, Út, St, Čt a Pá (každý všední den)
4. Jak zobrazit záznamy Crontab?
Zobrazit položky Crontab aktuálně přihlášeného uživatele
Chcete-li zobrazit položky crontab, zadejte crontab -l z vašeho unixového účtu, jak je uvedeno níže.
ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [Note: This displays crontab of the current logged in user]
Zobrazit položky Root Crontab
Přihlaste se jako uživatel root (su – root) a proveďte crontab -l, jak je uvedeno níže.
root@dev-db# crontab -l no crontab for root
Crontab HowTo:Zobrazení záznamů Crontabs jiných uživatelů Linuxu
Chcete-li zobrazit položky crontab jiných uživatelů Linuxu, přihlaste se do root a použijte -u {uživatelské jméno} -l jak je uvedeno níže.
root@dev-db# crontab -u sathiya -l @monthly /home/sathiya/monthly-backup 00 09-18 * * * /home/sathiya/check-db-status
5. Jak upravit záznamy Crontab?
Upravit záznamy Crontab aktuálního přihlášeného uživatele
Chcete-li upravit položky crontab, použijte crontab -e, jak je uvedeno níže. Ve výchozím nastavení se tímto upraví crontab aktuálně přihlášených uživatelů.
ramesh@dev-db$ crontab -e @yearly /home/ramesh/centos/bin/annual-maintenance */10 * * * * /home/ramesh/debian/bin/check-disk-space ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C [Note: This will open the crontab file in Vim editor for editing. Please note cron created a temporary /tmp/crontab.XX... ]
Když uložíte výše uvedený dočasný soubor pomocí :wq, uloží se crontab a zobrazí se následující zpráva oznamující, že crontab byl úspěšně upraven.
~ "crontab.XXXXyjWkHw" 2L, 83C written crontab: installing new crontab
Upravit položky Root Crontab
Přihlaste se jako uživatel root (su – root) a proveďte crontab -e, jak je uvedeno níže.
root@dev-db# crontab -e
Upravit položky Crontab souboru jiného uživatele systému Linux
Chcete-li upravit položky crontab jiných uživatelů Linuxu, přihlaste se do root a použijte -u {uživatelské jméno} -e jak je uvedeno níže.
root@dev-db# crontab -u sathiya -e @monthly /home/sathiya/fedora/bin/monthly-backup 00 09-18 * * * /home/sathiya/ubuntu/bin/check-db-status ~ ~ ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C
6. Naplánujte si úlohu na každou minutu pomocí Cron.
V ideálním případě nemusíte mít požadavek naplánovat práci každou minutu. Ale pochopení tohoto příkladu vám pomůže pochopit další příklady uvedené níže v tomto článku.
* * * * * CMD
* znamená všechny možné jednotky – tj. každou minutu každou hodinu po celý rok. Více než použití tohoto * přímo, zjistíte, že je velmi užitečné v následujících případech.
- Pokud v poli minut zadáte */5, znamená to každých 5 minut.
- Pokud v poli minut zadáte hodnotu 0-10/2, znamená to každé 2 minuty během prvních 10 minut.
- Výše uvedenou konvenci lze tedy použít pro všechna další 4 pole.
7. Naplánujte si úlohu Cron na pozadí na každých 10 minut.
Pokud chcete každých 10 minut kontrolovat místo na disku, použijte následující.
*/10 * * * * /home/ramesh/check-disk-space
Provádí zadaný příkaz check-disk-space každých 10 minut po celý rok. Ale můžete mít požadavek na provedení příkazu pouze v pracovní době nebo naopak. Výše uvedené příklady ukazují, jak tyto věci dělat.
Místo zadávání hodnot do 5 polí je můžeme zadat pomocí jediného klíčového slova, jak je uvedeno níže.
Existují zvláštní případy, kdy místo výše uvedených 5 polí můžete použít @ následované klíčovým slovem – například restart, půlnoc, rok, hodina.
Klíčové slovo | Ekvivalentní |
---|---|
@ročně | 0 0 1 1 * |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
@reboot | Spustit při spuštění. |
8. Naplánujte si práci na první minutu každého roku pomocí @yearly
Pokud chcete, aby byla úloha provedena první minutu každého roku, můžete použít @roční klíčové slovo cron, jak je uvedeno níže.
Toto provede roční údržbu systému pomocí skriptu roční údržby v 00:00 1. ledna pro každý rok.
@yearly /home/ramesh/red-hat/bin/annual-maintenance
9. Naplánujte si Cron Job na začátek každého měsíce pomocí @monthly
Je to podobné jako u @ročního jako výše. Příkaz však provede jednou měsíčně pomocí @monthly klíčové slovo cron.
Toto provede zálohu skriptu shellu tape-backup v 00:00 1. každého měsíce.
@monthly /home/ramesh/suse/bin/tape-backup
10. Naplánujte si práci na pozadí každý den pomocí @daily
Pomocí @daily cron, toto provede denní čištění souboru protokolu pomocí skriptu cleanup-logs shell scriptat v 00:00 každý den.
@daily /home/ramesh/arch-linux/bin/cleanup-logs "day started"
11. Jak provést příkaz Linux po každém restartu pomocí @reboot?
Pomocí @reboot cron, toto provede zadaný příkaz jednou po každém spuštění počítače.
@reboot CMD
12. Jak zakázat/přesměrovat výstup pošty Crontab pomocí klíčového slova MAIL?
Ve výchozím nastavení crontab odesílá výstup úlohy uživateli, který úlohu naplánoval. Pokud chcete výstup přesměrovat na konkrétního uživatele, přidejte nebo aktualizujte proměnnou MAIL v crontab, jak je znázorněno níže.
ramesh@dev-db$ crontab -l MAIL="ramesh" @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [Note: Crontab of the current logged in user with MAIL variable]
Pokud jste nechtěli, aby se pošta nikam neposílala, tj. abyste zastavili odesílání výstupu crontab e-mailem, přidejte nebo aktualizujte proměnnou MAIL v crontab, jak je znázorněno níže.
MAIL=""
13. Jak provádět úlohy linuxového Cron každou sekundu pomocí Crontab.
Nemůžete naplánovat každou sekundu cronjob. Protože v cronu je minimální jednotka, kterou můžete zadat, minuta. V typickém scénáři není pro většinu z nás důvod spouštět v systému každou sekundu jakoukoli úlohu.
14. Zadejte proměnnou PATH v Crontab
Ve všech výše uvedených příkladech jsme zadali absolutní cestu linuxového příkazu nebo skriptu shellu, který je třeba spustit.
Například místo zadání /home/ramesh/tape-backup, pokud chcete zadat pouze tape-backup, přidejte cestu /home/ramesh do proměnné PATH v crontab, jak je znázorněno níže.
ramesh@dev-db$ crontab -l PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh @yearly annual-maintenance */10 * * * * check-disk-space [Note: Crontab of the current logged in user with PATH variable]
15. Instalace Crontabu ze souboru Cron
Místo přímé úpravy souboru crontab můžete také nejprve přidat všechny položky do souboru cron. Jakmile budete mít všechny tyto položky v souboru, můžete je nahrát nebo nainstalovat do cronu, jak je uvedeno níže.
ramesh@dev-db$ crontab -l no crontab for ramesh $ cat cron-file.txt @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space ramesh@dev-db$ crontab cron-file.txt ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space
Poznámka: Tím se nainstaluje soubor cron-file.txt do vašeho crontab, což také odstraní vaše staré záznamy cron. Buďte tedy opatrní při nahrávání záznamů cron ze souboru cron-file.txt.
Další Cron tutoriály
- Cron vs Anacron:Jak nastavit Anacron na Linuxu (s příkladem)
- Jak spouštět Cron každých 5 minut, sekund, hodin, dnů, měsíců
- 6 příkladů příkazů Linux Crontab
- Jak nainstalovat, upravit nebo odebrat úlohy Cron v dávkovém režimu
- Pochopte příkazy at, atq, atrm, batch pomocí 9 příkladů
Úžasné články o Linuxu
Následuje několik úžasných 15 příkladů články, které by vám mohly pomoci.
- Mami, našel jsem to! — 15 praktických příkladů hledání příkazů pro Linux
- 15 příkladů zvládnutí historie příkazového řádku Linuxu
- Příkaz Unix LS:15 praktických příkladů
- Ovládněte Grep! – 15 praktických příkladů příkazů Grep