Cron - přesně podle plánu. Nastavení Plánovače úloh – Crontab

V OS Unix je možné spouštět uživatelské programy v čase, který si uživatel určí. K tomu slouží program cron, který přijímá pokyny od uživatelů a podle nich provádí libovolné úkoly podle přijatých skriptů. Naši klienti mohou tuto funkci používat k provádění pravidelných úkolů.

Jak nastavit cron ve vašem osobním účtu (u unixových tarifů)

Protože ne všechny PHP programy mohou běžet přes SAPI CLI bez předchozí úpravy, můžete je spustit wget. Například:

/usr/local/bin/wget -O /dev/null -q http://mysite.tld/cron.php?action=123

Pokud skript používá funkce vyžadovat, zahrnout a obsahují relativní cesty, pak na začátku spouštěného skriptu použijte volání funkce chdir(), který nastaví aktuální pracovní adresář.

Jak přijímat chybové zprávy z programů spuštěných cronem

Pokud při spouštění programu spouštěného z cronu narazíte na chyby, pravděpodobně budete chtít dostávat chybové zprávy, abyste mohli plně sledovat výkon pravidelně spouštěných úloh. Chcete-li to provést, umístěte na začátek skriptu cron následující řádek:

[email protected]

Jistě, [email protected] musíte ji nahradit skutečnou e-mailovou adresou, na kterou budou doručována upozornění. Pokud potřebujete přijímat chybové zprávy na několik adres, zadejte všechny tyto adresy oddělené čárkami.

Vezměte prosím na vědomí, že cron pošle poštou to, co běžící skripty vystupují. Pokud například napíšete skript, který vytiskne řádek „Hello, world“ a spustíte jej přes cron, obdržíte e-mail s řádkem „Hello, world“ pokaždé, když cron spustí takový skript.

Abyste tomu zabránili, například když nepotřebujete textový výstup skriptu, musíte přidat znaky

> /dev/null 2>&1

Kompletní řádek pro cron bude vypadat takto:

0 1 * * * /usr/local/bin/php -q $HOME/script.php > /dev/null 2>&1

Doporučujeme zkontrolovat správnou syntaxi skriptů, které jste nastavili, aby se spouštěly přes cron. Skripty mohou obsahovat chybu, nemusí fungovat stejně při spuštění přes webový server a přes cron a tak dále. Chcete-li se ujistit, že skript bude správně fungovat přes cron, nejprve jej zkontrolujte pomocí následujícího příkazu v unixovém shellu:

/usr/local/bin/php -l skript.php

Pokud ve skriptu nejsou žádné chyby, zobrazí se zpráva „Ve skriptu.php nebyly zjištěny žádné chyby syntaxe“.

Omezení

Pro programy spouštěné přes cron platí stejná omezení spotřebovaných zdrojů jako pro procesy spouštěné uživatelem v unixovém shellu. Hovoříme o omezení doby provádění programu, množství dostupné paměti, omezení velikosti souboru a tak dále.

V systému Linux Automatické spouštění úloh provádí démon crond a nejen správce systému, ale i uživatelé mohou vytvářet plány pro automatické spouštění úloh.

Jak crond funguje?

Princip crond démona je jednoduchý. Po spuštění (obvykle při nabootování systému) se démon každou minutu probudí a zkontroluje, zda je na danou minutu naplánováno spuštění nějakých programů. Pokud jsou takové programy nalezeny, démon je spustí a odešle e-mailové zprávy uživatelům, kteří jejich spuštění naplánovali.

Plánování úkolů

Vytvoření rozvrhu není obtížný úkol. Rozvrh je umístěn v samostatném souboru crontab. Každý řádek souboru obsahuje úlohu, která musí být spuštěna v určitou dobu.

Formát souboru Crontab

Část čas-datum se skládá z pěti číselných polí oddělených mezerami, která definují čas, kdy úloha začíná:

Pro usnadnění vyplňování těchto polí byla zavedena následující pravidla:

  • Hodnoty můžete zadat jako číselné intervaly. Například interval 1-3 v poli hodin znamená 1:00, 2:00 a 3:00 půlnoc, 2-4 v poli den v týdnu - úterý, středa nebo čtvrtek.
  • Intervaly lze nastavit v krocích větších než jedna. Chcete-li například označit každou druhou hodinu počínaje půlnocí, nastavte interval na 0-23 v krocích po 2 oddělených lomítkem: 0-23/2
  • Hvězdička (*) označuje celý rozsah hodnot polí, od minima po maximum. Například v poli den v měsíci hvězdička znamená interval 0-31, v poli den v týdnu - 0-7
  • Den v týdnu nebo měsíci lze označit prvními třemi písmeny jeho (anglického) názvu

Příklady čas-datum

Několik příkladů vyplňování polí čas-datum:

0 1 * * * Spouštět úlohu denně v 1:00 o půlnoci 30 14 * * 0 Spouštět úlohu v neděli ve 14:30 0 23-7/2:8 * * * Spouštět úlohu každé 2 hodiny od 23:00 do 7:00 a v 8:00 0 12 * 1 po Spustit práce v poledne každé pondělí v lednu každého roku 0 12 2 únor * Spustit úlohu v poledne druhého února každého roku

Příkazové pole

Pole příkazu je odděleno od polí data a času jednou nebo více mezerami a sahá až na konec řádku. Příkazy zpracovává shell /bin/sh.

Například následující záznam crontab vyžaduje spuštění /usr/sbin/backup každý den v 1:00:

0 1 * * * /usr/sbin/backup

Některé příkazy (například mail) vyžadují vstup ze standardního vstupního zařízení. To je označeno znakem procenta (%). První takový znak označuje začátek standardního vstupu, každý následující znak označuje změnu řádku.

Úprava souboru crontab

Soubor crontab se upravuje příkazem crontab -e. Jsou možné dva přístupy:

  • vytvoření nového souboru se všemi položkami, které by měly být obsaženy v souboru crontab, a jeho zapsání na disk pod tímto názvem pomocí příkazu crontab;
  • přímou úpravu souboru pomocí příkazu crontab -e.

Zápis ze souboru

Chcete-li zapsat obsah souboru crontab z jiného souboru, musíte tento jiný soubor vytvořit (ve známém textovém editoru) se všemi položkami, které by měly tvořit soubor crontab. Může to být například následující záznam:

0 1 * * * /usr/sbin/backup

Vytvořený soubor by měl mít vhodný název, například úlohy cron. Jakmile je zadaný soubor vytvořen, musí být jeho obsah zapsán do souboru crontab pomocí příkazu:

~$ crontab cronjobs

Obsah souboru cronjobs zcela nahradí obsah souboru crontab uživatele. Pomocí této metody může každý uživatel upravit svůj soubor crontab. Superuživatel má zvláštní práva upravovat soubory crontab jiných uživatelů. Úprava souboru někoho jiného je označena parametrem -u. Například příkazem:

~# crontab -u oleg cronjobs

soubor cronjobs je zapsán jako soubor crontab uživatele oleg.

Přímá úprava souboru crontab

Příkaz crontab vám umožňuje vyhnout se vícekrokové operaci vytváření samostatného souboru. Pokud zadáte příkaz crontab s volbou -e, můžete soubor crontab upravit přímo.

Ve výchozím nastavení se pomocí příkazu crontab s volbou -e načte soubor crontab do editoru. Editor Vi- výkonný, i když komplexní nástroj, oblíbený mezi zkušenými uživateli Unix. Někdo, kdo preferuje jiný editor, např. Xedit, může nastavit odpovídající hodnotu proměnné prostředí EDITOR:

~$ export EDITOR=xedit

Poté zadejte příkaz

způsobí otevření souboru crontab v určeném editoru.

Stejně jako běžný uživatel může upravovat svůj vlastní soubor crontab, může superuživatel upravovat soubory crontab jiných uživatelů. Chcete-li to provést, použijte příkaz:

~# crontab -u uživatelské jméno -e

Zobrazení souboru crontab

Chcete-li zobrazit obsah souboru crontab, zadejte příkaz:

Superuživatel může prohlížet soubory crontab jiných uživatelů:

~# crontab -u uživatelské jméno -l

Odebírání souboru crontab

Chcete-li odstranit obsah svého souboru crontab, uživatel zadá příkaz:

Superuživatel může mazat soubory crontab jiných uživatelů.

Cron se používá k automatizaci provádění přiřazených úloh na serveru. Běží na Linuxu a je skvělý pro spouštění programu nebo skriptu na konkrétní čas a frekvenci tím, že je předem naplánujete.

Nastavení plánovače úloh Cron

Úkoly, které je třeba provést, jsou zapsány ve formě řádků, ve kterých je nutné uvést dobu zapnutí a příkaz, co přesně je třeba spustit. Pro každý úkol je přidělen samostatný řádek. Například:

30 3 * * 2 /vasadresar/myscript.pl

V jazyce, který je pro běžného uživatele srozumitelnější, jsou označeny: minuty/hodiny/den v měsíci/den v týdnu/příkaz. Tento příklad znamená, že každé úterý ve 3:30 by měl Cron spustit soubor s názvem youdirectory/myscript.pl.

Pokud uvedete hodnoty oddělené čárkami, např. v položce „Den“ napíšete 2,4,6, pak se soubor spustí v určený čas každé úterý, čtvrtek a sobotu.

Pokud zadáte hodnoty oddělené pomlčkou, úloha se provede v zadaném časovém intervalu. Pokud například v položce „Clock“ nastavíte 3-7, soubor se spustí každou hodinu od 3 do 7 hodin.

Frekvenci můžete nastavit také zápisem do sloupce času, např. „Hours“ /12. Poté bude úloha prováděna každých 12 hodin.

Je důležité vědět, že "*" neznamená žádnou hodnotu, ale všechny možné hodnoty. To znamená, že pokud nastavíte * * * * 1 /yourdirectory/myscript.pl a chcete, aby se soubor spouštěl každé pondělí, pak se to ukáže jako zcela nesprávné a soubor se bude spouštět každou minutu.

Další důležitou funkcí je nutnost zadat absolutní cestu k souboru. A také soubor musí mít taková přístupová práva, aby se dal alespoň spustit.

Z uvedených příkladů je zřejmé, že tento plánovač úloh v Linuxu je velmi pohodlný nástroj, takže vám doporučujeme seznámit se s některými jeho funkcemi podrobněji.

Nejjednodušší a nejběžnější metodou práce s Cronem je administrační panel hostingu. Konfigurace Cron se však pro různé panely vyskytuje odlišně.

Někdy se stává, že hosting neposkytuje možnost pracovat s Cronem přes administrační panel. V takové situaci se používá protokol SSH. Pomocí něj se připojíte k serveru pomocí programu PuTTY a zadáváte úkoly na příkazovém řádku.

Chcete-li začít, zadejte příkaz:

Crontab –e

Dále budete přesměrováni na vi - textový editor, tyto editory se však mohou u různých poskytovatelů hostingu lišit. Pokud nejste obeznámeni s prací ve vi, můžete zadat příkaz: EDITOR=ee crontab –e, který vás přesměruje na jednodušší a intuitivnější editor.

Pokud hosting nepodporuje editor, který se otevře, budete muset zjistit, jak funguje vi:

  • pro zadávání textu se musíte přepnout do stejnojmenného režimu stisknutím tlačítka „i“;
  • pro ukončení režimu použijte tlačítko „Esc“;
  • Chcete-li odstranit znak v režimu zadávání textu, použijte klávesy „Esc“ a poté „x“;
  • pro uložení a ukončení souboru stiskněte „:wq“;
  • Nezapomeňte stisknout klávesu „Enter“ na konci každého řádku, je to nezbytné pro fungování Cron;
  • Chcete-li zobrazit existující úlohy v Cronu, zadejte příkaz crontrab -l.

Příklady úloh Cronu v Linuxu

- Proveďte úkol každých 6 hodin ve 30 minutách každý den v měsíci:

30 */6 * * * /vasadresar/myscript.pl

— Proveďte úlohu po každém restartu:

@reboot/yourdirectory/myscript.pl

— Dokončete úkol 15. dne každého měsíce v 00:00:

0 0 15 * * /vasadresar/myscript.pl

soubory PHP

Ke spouštění PHP skriptů obvykle používáte interpret. Neexistují žádné univerzální pokyny pro jeho provoz, protože různé hostingové stránky používají různé programy. V důsledku toho se WGET často používá ke spuštění PHP v Cronu. Zadejte následující položku:

1 2 * * 3 root wget -O - -q -t 1 http://mysite.com/file.php

Podívejme se na to podrobněji:

  • "-O-" - zabraňuje Cron ve vytváření dalších souborů, čímž se server zbavuje zbytečného nevyžádaného odpadu, protože práce probíhá v konzole;
  • „q“ - operace se již nezobrazují na obrazovce;
  • „t-1“ – umožňuje pouze jeden pokus o připojení.

Omezení Cron

Samotný Cron má pouze jedno omezení – dobu provádění úlohy. Pokud přetížíte svůj hostingový server, může to zabránit spuštění Cron více než jednou za několik minut nebo hodin. Kromě toho je Cron omezen pouze zdroji serveru, jako je RAM, objemy dat, doba provádění příkazů atd.

Pokud se server restartuje, Cron uloží všechny vaše úkoly a restartuje se s ním.

Zpráva

Cron má nastavení pro nastavení e-mailových upozornění na jeho práci. To je zvláště užitečné, pokud během provozu dojde k nějaké chybě. Chcete-li povolit taková upozornění e-mailem, musíte do crontab zadat následující řádek:

MAILTO= [e-mail chráněný]

Po MAILTO= je uveden požadovaný mail. Můžete jich zadat několik najednou a uvést je oddělené čárkami. Nyní, pokud dojde k chybě, budete o ní informováni. Kromě toho budou výsledky skriptů zaslány také na váš e-mail. Pokud vám však tato funkce vadí, můžete ji deaktivovat zadáním příkazu > /dev/null 2>&1 na konci úlohy.

Naše materiály na serveru Ubuntu se občas dotknou problematiky spouštění určitých úloh podle plánu. Abychom nevysvětlovali pokaždé to samé, rozhodli jsme se vytvořit tento materiál, který by měl správcům systému pomoci zvládnout a efektivně používat plánovač úloh v Linuxu.

V Ubuntu Server se používá jako plánovač úloh cron- plánovač s rozhraním příkazového řádku. Je důležitou součástí systému a začíná fungovat ihned po instalaci a provádí různé systémové úkoly. Naším cílem je poskytnout to našim službám, zejména proto, že to není tak obtížné, jak se zdá.

Existují dva typy rozvrhů cron: uživatel a systém. Liší se tím, že první je vytvářen uživateli a spouštěn s ohledem na uživatelská práva, druhý slouží pro administrativní nebo systémové účely a lze jej spustit jménem libovolného uživatele.

Chcete-li vytvořit nebo změnit vlastní plán, zadejte příkaz:

Crontab -e

Když jej spustíte poprvé, nástroj vás vyzve k výběru editoru, který doporučujeme vybrat mcedit(vyžaduje nainstalovaný mc), nebo jiný editor, se kterým umíte pracovat.

Formát řádků jízdního řádu je:

minuta hodina den měsíc den_v_týdnu příkaz

  • Minuta- čas v minutách od 0 do 59
  • Hodina- od 0 do 23
  • Den- den v měsíci od 1 do 31
  • Měsíc- od 1 do 12 nebo písmenná označení jan - pros
  • den v týdnu- od 0 do 6 (0 - neděle) nebo so - ne
  • Tým- řetězec ve formátu příkazového interpretu, který bude proveden, záznam jako tým1 && tým2 spustit několik příkazů za sebou.

Hodnoty minut, hodin, dnů lze zadat následovně:

  • Význam- číslo udávající datum nebo čas, zástupný znak je povolen * umožňující celý rozsah hodnot
  • Více významů- je povoleno zadat několik hodnot oddělených čárkami, například 2,14,22
  • Rozsah hodnot- označeno pomlčkou, například 2-10
  • Hodnotový krok- označeno zlomkem, jehož jmenovatelem je krok, například */3 - každá třetí hodnota 0, 3, 6, 9 atd. Čitatel musí být rozsah hodnot nebo hvězdička.

Zvažte následující příklad:

0 8-19/2 * * 1 /doma/ivanov/test

To znamená, že každou druhou hodinu od 8 do 19 (8, 10,12,14,16) v pondělí spusťte testovací skript v Ivanovově domovském adresáři.

Okamžitě bychom vás chtěli varovat před častou chybou: při označování periodického provádění musí být výslovně uvedena všechna data, hvězdička označuje celý rozsah hodnot, nikoli jejich absenci. Pokud například potřebujete spustit určitý skript každou hodinu od 10 do 15, bylo by to nesprávné:

* 10-15 * * * /doma/ivanov/test

Tento řádek spustí skript každou minutu v rozmezí od 10 do 15 hodin. Bude to správné:

0 10-15 * * * /home/ivanov/test

Tato položka umožní spuštění skriptu na začátku každé hodiny zadaného rozsahu.

Kromě data můžete použít řadu speciálních řetězců:

  • @restartovat- provést příkaz při restartu
  • @roční nebo @každoročně- provést 1. ledna, podobně jako záznam: " 0 0 1 1 * "
  • @měsíční- provádět 1. dne každého měsíce, podobně jako " 0 0 1 * * "
  • @týdně- provádět každou neděli, ekvivalentní „ 0 0 * * 0 "
  • @denní nebo @půlnoc- každý den o půlnoci" 0 0 * * * "
  • @hodinově- jednou za hodinu," 0 * * * * "

Takže pro každodenní provádění našeho skriptu každou půlnoc můžete napsat:

@midnight /home/ivanov/test

Po dokončení vytváření plánu uložte soubor a ukončete editor. Vlastní rozvrh bude uložen v /var/spool/cron/crontabs pod jménem aktuálního uživatele.

K dispozici je soubor pro systémové a administrativní úlohy /etc/crontab Syntaxe položek v něm se vyznačuje přítomností další hodnoty - uživatele, jehož jménem bude úloha spuštěna:

minuta hodina den měsíc den_v_týdnu uživatelský příkaz

Příklad takového zápisu:

0 19 * * 1-5 root /etc/backup

Podle kterého v 19:00 od pondělí do pátku bude spuštěn scénář /etc/backup jménem uživatele vykořenit.

Tento soubor také obsahuje systémové plány, takže jeho úpravy by měly být prováděny opatrně. Tam by měly být umístěny všechny systémové a administrativní úkoly.

Jak vidíme cron Je to docela snadné použití, ale zároveň poskytuje bohaté možnosti pro nastavení plánů v Ubuntu Server. Doufáme, že tento článek pomůže správcům zvládnout tento nástroj.

Některé úkoly vyžadují použití plánovač- speciální program, který spouští určité skripty, programy atd. v určitém okamžiku. Ve většině případů toto Cron. Možná jsou i další, ale já o nich nic nevím. V tomto článku budu hovořit o některých funkcích nastavení Cronu na příkladu spuštění PHP skriptu.

Cron úlohy a spuštění PHP skriptu

Samotný záznam (úkol) v Cronu (obvykle podle názvu složky crontab nebo crontabs) sestává z časové razítko A týmy. Časové razítkoúkol obsahuje následující hodnoty: den v týdnu, měsíc, den, hodina a minuta a tým (často nazývané: cvičení) , alespoň v případě spuštění skriptu, se může skládat z interpretu a samotného skriptu, například:

`/usr/bin/ which php` /home/l/login/public_html/script.php

V tomto případě: `/usr/bin/který php` je absolutní cesta k interpretu PHP a /home/l/login/public_html/script.php je absolutní cesta ke skriptu PHP. Je pozoruhodné, že cesta k interpretu a skriptům se pro vás může lišit, protože závisí na nastavení webového serveru.

Nastavení Cronu přes PU

Většina poskytovatelů hostingu poskytuje klientům speciální ovládací panel(PU) hosting, který usnadňuje konfiguraci a práci s položkami Cron. Takto vypadá spuštění php skriptu cron_admitad.php v plánovači na SpaceWebu.

Upozorňujeme, že zde není uvedena cesta k interpretu (více o tom trochu později). Pozoruhodné je také použití symbolu „ vlnovka" (~) jako alias" domovský adresář» (s ohledem na uvedený příklad: /home/l/login). Zjednodušeně řečeno je to adresář, do kterého se za normálních podmínek zpočátku dostanete přes FTP.

Cesta k interpretu ve skriptu php

Většina problémů má více řešení. Často je těžké říci, který z nich je optimální, ale o to nejde.

symbol " mříž" (#) je komentář v PHP, ale sekvence #! (Angličtina) linie třesku, hash-bang nebo ona-bang) má speciální význam - určuje cestu k interpretu skriptu.

Faktem je, že v operačních systémech podobných UNIXu mohou být skripty vytvářeny v různých jazycích: PHP, Perl, Python atd. Když je skript spuštěn webovým serverem, je založen na přípony souboru (například: .php, .phtm, phtml atd. jsou běžná rozšíření pro interpret PHP). Operační systémy podobné UNIXu se zpravidla nezaměřují na příponu souboru - soubor ji často prostě nemá. Systém přečte první řádek a hledá obsluhu skriptu.

Ve výše uvedeném skriptu PHP je první řádek, který mám:

#!/usr/local/bin/php

Opět platí, že cesta k vašemu PHP interpretu se může lišit od cesty uvedené v příkladu, protože vše závisí na nastavení webového serveru.

Cesty k souborům ve skriptu běží přes Cron

Další důležitá nuance. Pokud váš skript používá funkce require() , include() , fopen() atd., které zahrnují přístup k souborům třetích stran na webovém serveru, musíte zadat absolutní cestu, například:

/home/s/shop4mru/public_html/content/data/coupons.db

Opět platí, že cesta k souboru coupons.db se může lišit od cesty uvedené v příkladu, protože vše závisí na nastavení webového serveru.

Obecně lze také použít relativní cestu. K tomu použijte PHP funkci chdir(), která změní aktuální PHP adresář na ten, který je zadán jako jeho parametr.

Abych byl upřímný, tuto funkci jsem nepoužil, ale pokud tomu rozumím, situace je následující. Před přístupem k souboru třetí strany na webovém serveru se vloží něco jako následující kód:

Chdir("public_html"); // přechod do adresáře: /home/s/shop4mru/public_html

Soubor tedy s ohledem na daný příklad bude přístupný přes relativní cestu:

./content/data/coupons.db

Tečka na začátku znamená aktuální upravený adresář.

Pojďme si shrnout nastavení Cronu

Cron (často se nazývá podle názvu složky crontab nebo crontabs) - plánovací program spuštěný na webovém serveru poskytovatele hostingu, který spouští skripty, programy a další příkazy v určitém okamžiku. Samotný úkol je záznam skládající se z časového razítka a příkazu. Zde je důležité uvést správné cesty k interpretru skriptů a souborům v něm obsaženým.

v 8:00 Upravit zprávu 9 komentářů



Nahoru