Cron je plánovací démon, který provádí úlohy cron v určených intervalech. Úlohy Cron automatizují údržbu systému, opakující se nebo administrativní úlohy, jako je zálohování databáze nebo dat, aktualizace systému, kontrola využití místa na disku, odesílání e-mailů a tak dále.
Úlohy cron můžete naplánovat tak, aby se spouštěly podle minuty, hodiny, dne v týdnu, dne v měsíci, měsíce nebo jakékoli jejich kombinace.
Proč Cron?
- Cron vám dává kontrolu nad tím, kdy se vaše úloha nebo úkol spustí. Můžete například ovládat minutu, hodinu, den atd.
- Úlohy Cron nezabírají paměť, když se neprovádějí.
- To eliminuje potřebu psát smyčkový a logický kód pro úlohu.
- Pokud se úloha z nějakého důvodu nezdaří, spustí se znovu v příštím časovém intervalu.
Nainstalujte a spusťte démona cron
Nástroj cron v Linuxu se instaluje s balíčkem cronie, který poskytuje služby cron.
Zkontrolujte, zda je balíček cronie nainstalován nebo ne.
[tuts@fosslinux ~]$ rpm -q cronie cronie-1.5.7-1.fc33.x86_64
Pokud balíček cronie není přítomen, nainstalujte jej pomocí následujícího příkazu pro uživatele Fedory.
[tuts@fosslinux ~]$ sudo dnf install cronie
Před naplánováním jakýchkoli úloh musíte spustit službu crond (démon cron).
Zkontrolujte, zda služba crond běží nebo ne.
[tuts@fosslinux ~]$ systemctl status crond.service ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor pre> Active: active (running) since Tue 2021-06-08 09:14:40 EAT; 2h 58min ago Main PID: 1671 (crond) Tasks: 1 (limit: 3448) Memory: 14.4M CPU: 316ms CGroup: /system.slice/crond.service └─1671 /usr/sbin/crond -n
Služba je spuštěna, pokud příkaz indikuje ( Aktivní:aktivní (spuštěno). Pokud služba crond neběží, spusťte ji v aktuální relaci pomocí následujícího příkazu.
[tuts@fosslinux ~]$ systemctl start crond.service
Službu můžete také nakonfigurovat tak, aby se spouštěla a spouštěla automaticky při spouštění pomocí následujícího příkazu.
[tuts@fosslinux ~]$ systemctl enable crond.service
Spuštění služby crond můžete zastavit pomocí příkazu stop.
[tuts@fosslinux ~]$ systemctl stop crond.service
Můžete jej také znovu restartovat pomocí příkazu restart:
[tuts@fosslinux ~]$ systemctl restart crond.service
Definujte úlohu cron
Abychom pochopili, jak úlohy cron fungují, podíváme se na příklad úlohy cron a části, které tvoří konfigurační soubor crontab.
Příklad:Úloha cron pro stažení nejnovějších změn větve git master.
*/55 * * * * username cd /home/username/project/shop_app && git pull origin master
Výše uvedená úloha cron se skládá ze dvou klíčových částí:
- První část (*/55 * * * * ) nastavuje časovač tak, aby se spouštěl každých 55 minut.
- Druhá část konfigurace úlohy cron definuje příkazy tak, jak by se spouštěly z příkazového řádku. Příkaz se spustí jako uživatel (uživatelské jméno), poté změňte adresář na (/home/username/project/shop_app). Poslední část provede příkaz git pro stažení nejnovějších změn v hlavní větvi vašeho projektu.
Použití crontab k vytvoření úlohy cron
Obecně platí, že byste neměli přímo upravovat soubory cron. Místo toho použijte příkaz crontab k vytvoření, úpravě, instalaci, odinstalaci nebo seznamu úloh cron spuštěných ve vašem systému. Jakmile definujete úlohy cron, poběží na pozadí a démon bude neustále kontrolovat nové úlohy cron v souborech /etc/crontab, /etc/cron.*/ a /var/spool/cron/.
Distribuce založené na RedHat, jako je Fedora, ukládají soubory crontab do adresáře /var/spool/cron, zatímco distribuce Debian a Ubuntu do adresáře /var/spool/cron/crontabs. Celosystémové soubory crontab a skripty jsou uloženy v souboru etc/crontab a v adresáři /etc/cron.d.
Všimněte si, že po vytvoření nových konfiguračních souborů nebo úpravě existujících souborů nemusíte cron restartovat.
Časová syntaxe a operátory Crontab
První částí definice úlohy cronu jsou informace o načasování. Určuje, kdy a jak často se bude úloha cron spouštět. Skládá se z minuty, hodiny, dne v měsíci, měsíce, dne v týdnu v tomto pořadí. Můžete zadat jednu nebo více hodnot oddělených čárkou nebo pomlčkou.
.---------------- minute (0 - 59) | .------------- hour (0 - 23) | | .---------- day of month (1 - 31) | | | .------- month (1 - 12) OR jan,feb,mar,apr … | | | | .---- day of week (0-6) (Sunday=0 or 7) OR sun,mon,tue,wed,thr,fri,sat | | | | | | | | | | * * * * * username cron job command to be executed
- * – Při definování doby provádění můžete místo hodnoty použít hvězdičku, která představuje všechny možné hodnoty pro danou pozici. Pokud například použijete hvězdičku na pozici minuty, bude úloha cron běžet každou minutu.
- – Čárka určuje seznam hodnot pro opakování. Pokud například zadáte 2, 3, 6 v poli Hour, úloha cron se spustí ve 2:00, 3:00 a 6:00.
- – – Pomlčka určuje rozsah hodnot. Pokud máte například v poli den v týdnu 2–6, bude úloha cron běžet každý pracovní den od úterý do soboty.
- / – Operátor lomítka určuje hodnoty, které se budou v určitém intervalu opakovat. Například */6 v poli hodin označuje, že úloha cron se bude provádět každých šest hodin. Je to podobné jako při zadávání 0,6,12,18.
Předdefinovaná makra
Cron má několik speciálních plánovacích maker, která můžete použít k určení společných intervalů. Můžete je použít místo specifikace data a času.
- @reboot – Zadaná úloha se provede při spuštění systému.
- @ročně nebo @ročně – Zadaný úkol se provádí jednou ročně 1. ledna o půlnoci. Je to podobné jako 0 0 1 1 *.
- @monthly – Úloha se provádí jednou za měsíc první den v měsíci o půlnoci. Je to podobné jako 0 0 1 * *.
- @weekly – Zadaná úloha se provádí jednou týdně v neděli o půlnoci. Je ekvivalentní 0 0 * * 0.
- @daily – Zadaná úloha se provádí jednou denně o půlnoci. Je ekvivalentní 0 0 * * *.
- @hourly – Úloha se provádí jednou za hodinu na začátku hodiny. Je to podobné jako 0 * * * *.
Příkaz Crontab
Příkaz crontab vám umožňuje nainstalovat, otevřít nebo zobrazit soubor crontab.
Vytvořte soubor crontab nebo otevřete existující soubor pomocí následujícího příkazu:
$ crontab -e
Příkaz ve výchozím nastavení otevře editor vi a umožní vám definovat úlohy cron, které chcete spouštět ve vašem systému.
Vypište všechny úlohy cron ve vašem systému a zobrazte obsah souboru crontab:
$ crontab -l
Vypište úlohy cron pro konkrétního uživatele pomocí volby -u:
$ crontab -u username -l
Odeberte všechny úlohy cron pomocí příkazu -r:
$ crontab -r
Odeberte úlohy cron pro konkrétního uživatele pomocí příkazu -r -u jako uživatele root:
$ crontab -r -u username
Před odstraněním odeberte aktuální soubor crontab s výzvou.
$ crontab -i
Proměnné Crontab
- PATH=/usr/bin:/bin je výchozí cesta crontab. Můžete však definovat cestu k příkazu, který provádíte, nebo změnit proměnnou cron $PATH.
- bin/sh je výchozí shell.
- Prostředí MAILTO definuje vlastníka crontab pro odesílaná e-mailová upozornění. K proměnné můžete připojit seznam všech e-mailových adres oddělených čárkami, na které chcete dostávat e-mailová upozornění. Pamatujte, že pokud je proměnná MAILTO prázdná (tj. MAILTO=” “), nebudou odesílány žádné e-maily.
Příklady úloh Cron
Následující úloha cron se spustí každou minutu:
* * * * * [cron job command]
Následující úloha cron se spustí šestkrát za hodinu, tj. každých 10 minut:
*/10 * * * * [cron job command]
Spusťte skript každou půl hodinu a přesměrujte výstup na „/home/tuts/Documents“:
[email protected] */30 * * * * /path/to/homescript.sh > /home/username/Documents
Pomocí operátoru &&spusťte každý pátek v 8:00 dva příkazy:
0 8 * * Fri commandA && commandB
Spusťte příkaz jednou za měsíc, pátý den v měsíci ve 2:00:
( tj. 5. března 2:00, 5. dubna 2:00, 5. prosince 2:00 atd.):
0 2 5 * * [cron job command]
Spusťte skript v 10:30, 3. a 23. dne každého měsíce:
30 10 3,23 * * /path/to/fosslinuxscript.sh
Pomocí následujícího příkazu můžete nastavit vlastní proměnné HOME, PATH, SHELL a MAILTO a spustit příkaz každou minutu.
HOME=/opt PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/usr/bin/zsh [email protected] */1 * * * * [cron job command]
Tipy pro plánování
Úkol plánování úloh cron může být náročný a skličující, protože počet úloh roste. Úlohy cronu spuštěné ve stejnou dobu, zejména v produkčním prostředí, mohou způsobit vážné problémy s výkonem. Například zálohy a kompilace systému, které se provádějí současně, spotřebovávají mnoho systémových prostředků a vašemu systému může dojít paměť RAM. Jedním ze způsobů, jak takovou výzvu obejít, je naplánovat si úkoly náročné na zdroje na různé denní, týdenní nebo měsíční doby. Můžete také přidat více paměti do systému nebo odstranit špatně napsané úlohy, které využívají velké množství paměti.
Další problém nastává, když je váš počítač vypnutý během období, kdy je naplánováno spuštění úlohy cron. V důsledku toho se úloha cron nespustí, dokud nebude příště naplánováno její spuštění. To může způsobit problémy, zvláště pokud je úloha cron pro váš systém kritická. Naštěstí Linux poskytuje program anacron, který uživatelům dává možnost plánovat úlohy cron v pravidelných intervalech. Více se dozvíte z manuálových stránek anacronu.
Omezení přístupu cronu
Cron poskytuje způsob, jak řídit, kteří běžní uživatelé systému mají přístup k příkazu crontab. Slouží k omezení chyb, které by mohly způsobit zahlcení systémových zdrojů, jako je paměť. Abyste předešli možnému zneužití, použijte k řízení uživatelského přístupu soubory /etc/cron.deny a /etc/cron.allow. Ke kterémukoli souboru můžete přidat uživatelské jméno a zakázat nebo povolit přístup.
Je důležité omezit přístup k úlohám cron a příkazu crontab uživatelům bez oprávnění root.
Závěr
Cron je nástroj hlavně pro systémové administrátory, ale je relevantní také pro mnoho uživatelských úkolů. Například používám cron k plánování nudných úloh, jako je zálohování a ve webových aplikacích.
Manuálové stránky cron, crontab a anacron považuji za užitečné a vynalézavé s informacemi a tipy.