GNU/Linux >> Znalost Linux >  >> Linux

Plánování systémových úloh pomocí Cronu na Linuxu

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í:

  1.  První část (*/55 * * * * ) nastavuje časovač tak, aby se spouštěl každých 55 minut.
  2.  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.


Linux
  1. Plánování úloh pomocí linuxového příkazu cron

  2. Pochopení systémových volání na Linuxu pomocí strace

  3. Linux Shutdown Command (s příklady)

  1. Linuxové tipy pro používání cronu k plánování úloh

  2. Monitorujte svůj systém Linux ve svém terminálu pomocí procps-ng

  3. Zlepšete výkon systému Linux pomocí noatime

  1. Vyzkoušejte Linux na jakémkoli operačním systému s VirtualBoxem

  2. Testování pera pomocí bezpečnostních nástrojů Linuxu

  3. Jak automatizovat úlohy v Linuxu pomocí Crontab