Webové stránky mohou spouštět naplánované úkoly s Cron

hodiny

Máme řadu redundantních monitorovacích systémů, které pravidelně provádějí procesy. Některé běží každou minutu, jiné jednou za noc podle toho, co dělají. Mohli bychom například spustit skript, který exportuje všechny zákazníky, kteří neuskutečnili nákup do 30 dnů, aby jim poslal kupón.

Spíše než snažit se je sledovat ručně, je mnohem snazší vytvářet úlohy, které jsou automaticky naplánovány a spuštěny. V systémech založených na Unixu je toho dosaženo pomocí Cronu. Pro vás lidi, kteří vědí, co děláte, neváhejte mě a čtenáře vzdělávat, pokud vyhodím dezinformace.

Je to nešťastné, ale typický webový vývojář není s Cronem vůbec obeznámen. I když ano, společnosti poskytující webhosting často neposkytují přístup nebo podporu Cronu. Můj hostitel je jedním z nich - umožňují vám ho používat, ale nepodporují ho.

Co je Cron?

Cron je pojmenován pro řecké slovo Chronos, což znamená čas. Cron běží v nepřetržité smyčce a spouští úkoly, které shromažďuje Crontab (možná pojmenovaný pro Kartaulator. Tyto úkoly se obvykle označují jako Cronjobs a mohou odkazovat na skripty na vašem webu.

Cron Diagram Vysvětlení

Jak nastavím Crontab

Zajistit, aby Cron skutečně běžel, může být náročné, takže tady je to, co jsem se naučil a jak jsem to udělal Pokud Suck:

  1. Nastavil jsem svůj skript, abych zkontroloval Twitter API zda někdo odpověděl @ifsuck. Porovnal jsem tyto zprávy se zprávami, které jsem již uložil na webu, a zadal všechny nové.
  2. Jakmile skript fungoval, povolil jsem uživateli oprávnění k provádění skriptu (744) a přidal odkaz na skript do mého souboru Cronjob - o tom později.
  3. Poté jsem se musel přihlásit na svůj web přes SSH. Na počítači Mac to vyžadovalo otevření terminálu a psaní SSH username@domain.com kde uživatelské jméno bylo uživatelské jméno, které jsem chtěl použít, a doménou byla webová stránka. Poté jsem byl vyzván k zadání hesla.
  4. Poté jsem se pokusil spustit skript přímo z příkazového řádku zadáním názvu souboru a relativní cesty na serveru: /var/www/html/myscript.php
  5. Jakmile to fungovalo správně, přidal jsem do prvního řádku souboru potřebný unixový kód: #! / usr / bin / php -q . Věřím, že to jednoduše řekne Unixu, aby k provedení skriptu použil PHP.
  6. Na příkazovém řádku Terminálu jsem napsal crontab (ostatní možná budou muset psát crontab -e) a stiskněte Enter ... a to bylo vše, co bylo potřeba!

Syntaxe vašeho souboru Cronjob

Pokud jde o # 2 výše, Cron využívá důmyslné schéma pro určení, kdy budou vaše skripty spuštěny. Ve skutečnosti to můžete skutečně zkopírovat a vložit do svého Cronfile (na mém hostiteli se nachází v / var / cívka / cron / s názvem souboru shodným s mým uživatelským jménem).

# + —————- minuta (0 - 59)
# | + ————- hodina (0 - 23)
# | | + ———- den v měsíci (1 - 31)
# | | | + ——- měsíc (1 - 12)
# | | | | + —- den v týdnu (0 - 6) (neděle = 0 nebo 7)
# | | | | |
* * * * * /var/www/html/myscript.php

Výše uvedené spustí můj skript každou minutu. Kdybych chtěl, aby běžel jen jednou za hodinu, dal bych jen, kolik minut po hodině si přeji, aby běželo, takže kdyby to bylo na 30minutové značce:

30 * * * * /var/www/html/myscript.php

Nezapomeňte také nastavit oprávnění k tomuto souboru jako spustitelný soubor! Zjistil jsem, že syntaxe, oprávnění a provádění crontabu z okna Terminálu byly nejdůležitějšími faktory. Pokaždé, když jsem soubor znovu uložil, našel jsem také svá oprávnění vyžadující reset!

UPDATE: Pokud byste se chtěli ujistit, že úlohy běží, jedním z jednoduchých způsobů je aktualizace databázového pole při posledním spuštění skriptu. Pokud je to méně časté, stačí napsat e-mail zaslaný sami sobě.

Další zdroje Cron:

Kolik úloh byste mohli pomocí Cronu automatizovat?

8 Komentáře

  1. 1

    Dobře popsaný článek o nastavení cronu, pro někoho nového v crojobech je nejobtížnější částí při nastavení cronu zjistit interval provádění cronjob a je docela dobré získat špatný interval na první pokus. Pokud jsou vaše cronjoby časově citlivé, je dobré zahrnout do skriptu některé kódy, které ozvění stav, abyste byli průběžně informováni o stavu provádění úlohy.

  2. 2

    Hi Doug,

    Při práci s úlohami cron je třeba zvážit pár věcí.

    Nejprve po několika desítkách si budete přát, abyste měli uživatelské rozhraní, databázi a anglickou syntaxi 😉

    Zadruhé, cron spustí úlohu v zadaný čas, bez ohledu na to, zda bylo předchozí vyvolání úlohy dokončeno. Takže spuštění úlohy jednou za minutu, která trvá 2 minuty, rychle povede ke spuštění stejné úlohy.

    Když se něco pokazí, není k dispozici žádné hlášení chyb, takže budete muset přidat vlastní hlášení chyb.

    Řešil jsem to několika způsoby:
    - nechat aplikaci spustit pomocí cron looku v databázi a určit, co je třeba spustit. Spusťte jej jednou za minutu nebo hodinu podle toho, co chcete
    - nechte každý skript vytvořit soubor 'lock' v / tmp a pokud existuje, nespouštějte znovu, zabráníte tak duplicitním úlohám, pokud je nechcete
    - pokud skript najde soubor zámku starší než 1 hodinu (nebo cokoli naznačuje, že jste zemřeli), pošlete e-mailové upozornění
    - nechat skript poslat e-mail o selhání práce, abyste věděli, že se něco pokazilo
    - podívejte se na rámce jako Flux nebo komerční plánovače, když vaše potřeby překročí několik skriptů

    Chris

  3. 4
  4. 5

    Stále si pamatuji první den, kdy jsem potkal Cronnie. Slyšel jsem o ní věci, že byla spolehlivá, vždy včas, ale někdy trochu matoucí ohledně jejích záměrů.

    Zjistil jsem, že je to pravda, protože pro mě byla zpočátku úplnou záhadou. Když jsem se na ni zeptal, docela rychle jsem pochopil, jak ráda operuje. Teď si nedokážu představit, že by v jejím životě prožil den bez ní. Dělá to pozemské vzrušující a zvedá z mých ramen mnoho břemen.

    Se vší vážností mám pocit, že jsem jen poškrábal povrch tím, co mohu automatizovat pomocí úloh cron. Opravdu jsou nejlepšími přáteli vývojářů. Pokud ke správě serveru používáte někoho jako CPanel, poskytuje mnohem přátelštější rozhraní pro vytváření cronů. Kompletní s rozbalovacími nabídkami pro minutu, hodinu, den, měsíc atd., Které pro vás vytvářejí linii cron.

  5. 7

    Určitě vidím, že toto by měl používat každý obchodník ... Existuje někdo, kdo může tuto službu poskytnout, protože zní příliš „technicky“?

Co si myslíte?

Tyto stránky používají Akismet k omezení spamu. Zjistěte, jak jsou vaše údaje komentářů zpracovávány.