Myslím, že cron je úžasný výtvor. Je jednoduchý v tom, čo robí, a zároveň je mimoriadne užitočný. Dovoľte mi uviesť krátky úvod pre tých, ktorí nepoznajú, potom vám ukážem šikovný trik, ktorý možno budete niekedy potrebovať. Pokračujte v čítaní tohto blogu a dozviete sa viac o crontab a príkaze crontab – a prečo by ste mali spustiť crontab na konci mesiaca.
Stručný úvod do Cron & Crontab
Pomocou cronu môžete nastaviť spustenie ľubovoľného príkazu kedykoľvek (alebo opakovane v nastavenom intervale). Názov pochádza z „chronos“ – gréckeho slova pre čas. Ak máte Linux, budete mať cron. Spustite príkaz “crontab” na úpravu alebo vytvorenie úloh pre vášho používateľa.
Syntax sa na prvý pohľad zdá trochu záhadná, ale je veľmi jednoduchá. Zadáte sériu čísel a symbolov, za ktorými nasleduje príkaz crontab, ktorý chcete spustiť. Čísla a symboly uvádzajú požadovaný čas a deň na spustenie príkazu. Sú oddelené medzerou takto:
minúta hodina deň mesiac deň v týždni
Takže tento záznam:
5 13 * 3 * vykonať_toto
spustí príkaz crontab „execute_this“ o 13:05 každý deň iba v marci. Trochu to mením:
5 13 * 3-5 * vykonať_toto
spustí rovnaký príkaz crontab v rovnakom čase, ale teraz sa bude spúšťať každý deň v marci, apríli a máji.
Ako som povedal, toto bol krátky úvod do cronu a príkazu crontab. Ak neviete, čo tu robíte, možno nebudete chcieť testovať na žiadnom dôležitom stroji. Choďte na prieskum a hrajte sa (je to najlepší spôsob, ako sa učiť).
Nastavenie Crontab na posledný deň v mesiaci
Ako teda vytvoríte crontab, ktorý bude spustený v posledný deň v mesiaci? Aby sme mohli začať, takto by vyzeralo spustenie vždy prvého dňa v mesiaci (opäť o 13:05):
5 13 1 * * vykonať_toto
To „1“ tam znamená, keď je dátum „1“, čo je prvý deň v mesiaci. Problém je v tom, že nemáme číslo, ktoré by sme tam dali, čo znamená posledný deň v mesiaci. Môže to byť 30, 31, 28 alebo niekedy aj 29. Ale jedna vec je vždy pravdivá o poslednom dni v mesiaci, zajtra je prvý!
Použime tieto informácie na vytvorenie tohto záznamu:
59 23 28-31 * * vykonať_toto
Tento som spustil tesne pred koncom dňa (23:59), ale môže to byť kedykoľvek budete potrebovať. A bude sa spúšťať každý mesiac v každom z našich možných dátumov konca mesiaca (28. – 31. 12.).
Samozrejme, nechceme, aby sa náš kód spustil 28. októbra. Toto nie je posledný deň v mesiaci. Dátum by mal byť 31, ak je október, ale čo je dôležitejšie (a spoľahlivejšie), zajtrajší dátum by mal byť 1. Je čas vytiahnuť naše superschopnosti v oblasti skriptovania.
[bash]dátum + %d[/bash]
vám poskytne aktuálny dátum ako dvojznakový reťazec. Ale keďže chceme vidieť, čo je zajtra, namiesto toho o to žiadame
[bash]dátum +%d -d zajtra[/bash]
Ak sa to zhoduje s „01“, potom vieme, že zajtrajšok je prvý, takže dnešok musí byť posledný.
[bash][ “$(date +%d -d tomorrow)” = “01” ] && vykonať_toto[/bash]
Výsledkom nášho testu (hranaté zátvorky) bude pravda alebo nepravda. Spustí tento test A (&&) ďalší príkaz, ktorým je príkaz, ktorý sme sa rozhodli spustiť ako prvý. Ale vzhľadom na spôsob fungovania počítačov, ak sa test vráti nesprávne, nebude to obťažovať spustenie druhého príkazu.
Takže až keď sa tento test vráti ako pravdivý, spustí sa náš druhý príkaz crontab. To je presne to, čo sme chceli a práve sme oklamali počítač, aby vykonal našu zlú prácu. Gratulujem!
Tu je to, čo zadáme do crontab, aby sa náš príkaz spustil na samom konci každého mesiaca:
[code language=”bash”]59 23 28-31 * * [ “$(date +%d -d tomorrow)” = “01” ] && vykonať_toto[/code]
Preskúmajte možnosti Magento s Magento hosting Od Hostinger.