Správné ošetření automaticky spouštěných skriptů
1. března 2017
Když je nějaký skript spouštěný automaticky cronem, může se stát spousta věcí:
- dříve jednoduchý úkol se s časem zesložiťuje a dojde časový limit
- dříve malá data narostou a dojde paměťový limit
- dojde k výpadku serveru dodavatele dat
- jeden z úkolů selže a proto se nepodaří dokončit ostatní
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 1234 bytes) in /foo.php on line 123
Fatal error: Maximum execution time of 30 seconds exceeded
Sestavil jsem si proto soupis několika způsobů ochrany, které lze dle potřeby kombinovat:
- na začátku spuštění zapsat zámek a na konci ho smazat. Pokud na začátku spuštění zámek existuje, poslat e-mail.
- kontrolovat počet zpracovaných položek, nastavit mezní hodnotu pro zaslání e-mailu.
- u všech dotazů do databáze, používat limit/časovou podmínku - např. při pročišťování logu.
- na úvodní stránce administrace uvádět poslední úspěšné spuštění, počet zpracovaných položek, dobu trvání a velikost dat. Nastavit mezní hodnoty pro zobrazení upozornění.
Dále je užitečné pamatovat na další věci:
- importovaná data a případně kompletní výstup ukládat
- prováděné akce logovat
- a tyto po nějakou dobu archivovat
Štítky: cron, importy, logování