Cron, Action Scheduler a staging
Modul 7: Vyhledatelnost a hosting · Doba čtení: 10 minut
Cíl lekce: Po této lekci dokážete vysvětlit, jak WooCommerce provádí úlohy na pozadí. Naplánované akce umíte zkontrolovat a při problémech opravit. Testovací prostředí (staging) pro e-shop umíte nastavit tak, aby nebyli ohroženi skuteční zákazníci a nevznikaly skutečné platby ani objednávky.
Klíčové pojmy: WP-Cron, skutečný cron, DISABLE_WP_CRON, Action Scheduler, naplánované akce, čekající, dokončené, neúspěšné, čištění, staging pro e-shop, testovací režim poskytovatele plateb, vypnutá pošta, webhooky, propojení, neobnovovat databázi přes produkci
Co se děje, když se nikdo nedívá
E-shop dělá spoustu práce, která přímo nesouvisí s kliknutím návštěvníka:
- ruší nezaplacené objednávky, když uplyne doba pro držení zásob (lekce 3.4);
- odesílá e-maily po změně stavu a webhooky do propojených systémů;
- aktualizuje přehledy a statistiky v administraci;
- čistí vypršené relace a dočasná data;
- uplatňuje doby uchovávání z nastavení Účty a soukromí (lekce 2.3);
- u předplatného nebo propojení s účetnictvím strhává platby a předává data.
K tomu WordPress používá WP-Cron a WooCommerce navíc Action Scheduler. Pokud nefungují správně, nepoznáte to hned. Poznáte to, až nezaplacené objednávky dál blokují zásoby, přehledy zůstávají prázdné nebo je propojení o několik dní pozadu.
WP-Cron a skutečný cron
Jak WP-Cron funguje a proč je lepší skutečná úloha cron, popisuje kurz WordPressu v lekci 6.3: WP-Cron se spouští při návštěvách, ne podle hodin. Při malém počtu návštěvníků je proto nespolehlivý a při velkém počtu zatěžuje server. Řešení: DISABLE_WP_CRON v souboru wp-config.php a úloha cron ve Vašem hostingovém panelu, která každých pár minut spustí wp-cron.php.
Pro e-shop to není optimalizace, ale nutnost:
- V noci, kdy je návštěvnost nízká, se nezaplacené objednávky stejně musí zrušit včas.
- Při velké akci naopak nechcete, aby se náročná úloha na pozadí přidala k požadavku zákazníka, který právě chce zaplatit.
U WebOké takovou úlohu vytvoříte v DirectAdminu v části Naplánované úlohy (DA 15.1, KB 48) s cestou k PHP /usr/local/bin/php. U jiných poskytovatelů hostingu to funguje podobně v jejich nastavení cronu. Pro e-shop zvolte interval jedna až pět minut, raději než deset. Úloha, která běží každou minutu a nemá co dělat, nestojí téměř nic.
Action Scheduler: fronta WooCommerce
Action Scheduler je fronta úloh na pozadí, která se dodává s WooCommerce a kterou používá i řada dalších pluginů (předplatné, propojení s účetnictvím, e-mailový marketing). Každá úloha je akce s časem a stavem. Fronta se zpracovává pomocí úlohy WP-Cron (action_scheduler_run_queue), takže i zde platí: bez spolehlivého cronu je fronta pozadu.
Vše najdete v části WooCommerce > Stav > Naplánované akce (Scheduled Actions). Pro každý stav je tam samostatná záložka:
| Stav | Význam | Co uděláte |
|---|---|---|
| Čekající (Pending) | Teprve se má spustit | Pokud jich jsou stovky s časem v minulosti, fronta je pozadu: zkontrolujte cron |
| Probíhá (In-progress) | Právě běží | Pokud akce dlouho visí, podívejte se do protokolu vedle ní |
| Dokončeno (Complete) | Hotovo | Nic; automaticky se odstraňují |
| Selhalo (Failed) | Skončila chybou | Přečtěte si chybovou zprávu ve sloupci Protokol; často jde o plugin nebo nedostupné propojení |
| Zrušeno (Canceled) | Záměrně neprovedeno | Obvykle nic |
Podle zdrojového kódu Action Scheduler ve výchozím nastavení odstraňuje dokončené a zrušené akce po jednom měsíci, neúspěšné po třech měsících. Pokud tabulka přesto rychle roste, nejspíš běží mnoho akcí, které stále znovu selhávají nebo se znovu vytvářejí. Místo pouhého vyprázdnění tabulky zjistěte, který plugin je vytváří (pomůže sloupec Skupina a název hooku).
Příklad z praxe u Theehuis Example: propojení s účetním programem po změně hesla řadilo každou objednávku do fronty jako neúspěšnou akci. Po týdnu bylo ve frontě 400 neúspěšných akcí a chybělo 60 faktur (lekce 5.6). Po opravě propojení mohl správce akce jednotlivě znovu spustit tlačítkem Spustit nyní (Run).
Staging pro e-shop
Co je staging, jak ho vytvoříte a jak ho zabezpečíte (heslo, noindex), popisuje kurz WordPressu v lekci 8.3. U WebOké k tomu slouží klonování v Installatronu (DA 13.7, KB 232) a složka chráněná heslem (DA 15.9); jiní poskytovatelé mají podobné nástroje. U e-shopu je potřeba myslet na několik věcí navíc, protože kopie e-shopu obsahuje skutečné údaje zákazníků a může provádět skutečné akce.
Hned po naklonování, dříve než uděláte cokoli jiného:
- Poskytovatel plateb v testovacím režimu, s testovacími klíči. Staging s ostrými klíči může přijímat skutečné platby nebo provádět vrácení peněz.
- Pošta vypnutá nebo přesměrovaná. Jinak kopie posílá skutečným zákazníkům potvrzení, upomínky a e-maily o opuštěném košíku. Použijte plugin, který veškerou poštu zadrží nebo ji pošle na jednu testovací adresu.
- Propojení a webhooky vypnuté. Účetnictví, synchronizace zásob, přepravní štítky, e-mailový marketing: jinak staging zaúčtuje faktury nebo odešle balíky. Zkontrolujte také WooCommerce > Nastavení > Pokročilé > Webhooky a klíče API.
- Projít naplánované akce. Fronta se zkopírovala s ostatními daty. Čekající akce (e-mail s upomínkou, platba předplatného) by se jinak na stagingu spustily ještě jednou.
- Omezit osobní údaje. Pokud k testování skutečné údaje zákazníků nepotřebujete, na stagingu je smažte nebo anonymizujte. Staging spadá pod GDPR a bývá hůře zabezpečený (lekce 5.5).
A nejdůležitější pravidlo při přenosu zpět: nikdy nepřepisujte databázi běžícího e-shopu databází ze stagingu. Mezi naklonováním a přenosem zpět přibyly objednávky, zákazníci, pohyby zásob a platby; ty byste ztratili. Změny proveďte znovu na produkci (už víte, že fungují), nebo synchronizujte jen soubory. Pokud to s databází jinak nejde, dělejte to jen s e-shopem v režimu údržby, hned po čerstvé záloze a s nástrojem, který objednávky a zákazníky vynechá.
Test aktualizace na stagingu
Typický postup u velké aktualizace WooCommerce nebo platebního pluginu:
- Vytvořte čerstvý staging (klon produkce) a nastavte pět výše uvedených bodů.
- Proveďte aktualizaci na stagingu a spusťte aktualizaci databáze, pokud o ni WooCommerce požádá.
- Udělejte testovací objednávku v testovacím režimu: zaplacení, neúspěšná platba, vrácení peněz (lekce 4.5).
- Zkontrolujte v Naplánovaných akcích a v protokolu chyb, zda nevznikly nové chyby.
- Poté aktualizujte produkci v klidné době, těsně předtím se zálohou (lekce 6.2).
Shrnutí
- WooCommerce dělá spoustu práce na pozadí; běží přes WP-Cron a Action Scheduler.
- Pro e-shop vždy používejte skutečnou úlohu cron (každou jednu až pět minut) místo WP-Cronu spouštěného návštěvami.
- Kontrolujte WooCommerce > Stav > Naplánované akce: mnoho opožděných čekajících nebo neúspěšných akcí je znamením, že nefunguje cron nebo některé propojení.
- Na stagingu: poskytovatel plateb v testovacím režimu, pošta a propojení vypnuté, projít naplánované akce, omezit osobní údaje.
- Nikdy nepřepisujte běžící e-shop databází ze stagingu; změny proveďte znovu na produkci.
Kvíz
Úkol
Úkol A7.3: Je Vaše testovací prostředí (staging) chráněné? Jde o stejnou kontrolu jako úkol A8.3 z kurzu WordPressu. Nejprve potřebujete doklad o vlastnictví Vaší domény (záznam TXT _weboke-cursus.<domein> nebo soubor /.well-known/weboke-cursus-<code>.txt s kódem, který obdržíte). Poté zadejte adresu svého e-shopu a adresu svého stagingu (host pod stejnou doménou). Program načte domovskou stránku stagingu bez přihlašovacích údajů a domovskou stránku produkce. Zelená: staging vyžaduje heslo (401), nebo má noindex a používá vlastní adresu (vstupní bod REST ukazuje na host stagingu), přičemž produkce noindex nemá. Oranžová: staging má noindex, ale nemá heslo, nebo nemá platný certifikát. Červená: staging je otevřený a indexovatelný, staging stále ukazuje na adresu produkce, nebo má produkce omylem noindex.
Otázky pro Vás (nekontrolují se): Je poskytovatel plateb na Vašem stagingu v testovacím režimu? Je pošta vypnutá nebo přesměrovaná? Jsou propojení a webhooky vypnuté? Kolik čekajících a neúspěšných akcí je teď v Naplánovaných akcích na produkci?
Další čtení
Tyto články popisují postup v panelech WebOké; v jiných panelech to funguje podobně.
- Příručka k DirectAdmin 15.1: Naplánované úlohy: automatické spouštění úloh
- Vytvoření cronjobu nebo úlohy (a co dělat, pokud neběží)
- Vytvoření testovacího prostředí (staging) pro WordPress
- Příručka k DirectAdmin 13.7: Klonování a vytvoření testovacího prostředí (staging)
- Příručka k DirectAdmin 15.9: Heslem chráněné složky
- Bezplatný kurz WordPress 8.3: Testovací prostředí (staging): bezpečné testování
- Bezplatný kurz WordPress 6.3: Obrázky, PHP a další zrychlení
- Action Scheduler (actionscheduler.org, anglicky): https://actionscheduler.org/
