Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Software
Časované úlohy, díl první
23. května 2006, 00.00 | Je-li počítač zapnutý, provádí mnoho operací, aniž by o nich uživatel nutně věděl. Systém neustále spravuje řadu úloh, které vyžaduje ke své činnosti. Doba, kdy byl v počítači spuštěn jediný program, je dávnou minulostí. Podívejme se, jak tyto možnosti využít pro své potřeby.
Počítač má jednu úžasnou schopnost, může za nás automaticky spravovat řadu informací a v pravou chvíli nám sdělit stav. Všichni si asi hned vybaví nějaký program na správu osobního času, třeba iCal. Správně, v celé řadě případů bude iCal tím nejvhodnějším řešením. O několik řádků dále si přiblížíme případy, kde právě tento program můžeme s úspěchem využít. V článku se však chci změřit na něco jiného. Na automatické úlohy, které počítač provádí zcela sám, po celou dobu své činnosti, v různých časových intervalech. Úlohy, které provádí v pozadí, tedy pro uživatele "neviditelně" až do okamžiku, kdy nastane ten správný čas k oznámení nějaké skutečnosti nebo provedení akce.
Vraťme se však zpět k programu iCal. Obecně je iCal znám jen jako "kalendářová aplikace". Opravdu tomu tak je, ovšem možnosti, které iCal nabízí, přesahují běžné chápání slova "kalendář". iCal za nás může hlídat přesný čas celého spektra událostí. Můžeme jej zapojit do správy našeho pracovního času i volných chvil. Uvědomíme-li si skutečnost, že čas události můžeme v tomto programu automaticky nastavit na různé intervaly, lze této aplikace využít i pro řízení práce počítače. Lze například vytvořit událost, která každý den v zadaném čase spustí zálohovací program. Upozornění na událost totiž může být prakticky cokoliv, od zobrazení běžné zprávy až po spuštění libovolné aplikace nebo skriptu. iCal si tak můžeme představit nejen jako kalendářovou aplikaci, ale též jako správce časovaných automatizovaných úloh v počítači.
Kde jsou ovšem hranice tohoto programu? iCal umožňuje nastavit událost podle pevného data a času, automaticky ji opakovat v pevném intervalu a veškeré události přitom zobrazuje v některém z kalendářů. Ovšem potřebujeme-li například provádět nějakou operaci každých deset minut, těžko nám v tom iCal pomůže. Dostáváme se k předmětu tohoto článku. Existuje řada úloh, které je třeba provádět v nějakém relativně krátkém časovém horizontu (sekundy, minuty, hodiny). Jistě existují programy, které to dokáží, ale v naprosté většině případů nám nepřinesou nic víc, než co nám standardně nabízí systém. Kvalita takových programů navíc může být různá a můžeme si tak do systému zavléci nějaký "nezbedný" program, který bude neustále spuštěný a tím může ohrožovat bezpečný chod celého počítače.
A nyní od teorie k praxi. Začneme tím, že si nejprve vytvoříme tři ukázkové programy, které později vyzkoušíme spouštět zcela automaticky a ukážeme si, jak takovéto automatické úlohy spravovat.
První příklad sice prakticky asi nikdo nevyužije, nanejvýš k pobavení někoho, kdo nebude vědět, že jej má v počítači instalovaný. Vytvořte si následující jednoduchý skript. Spusťte editor skriptů a vložte následující text, ověřte správnost syntaxe (Apple+K) a skript uložte jako aplikaci (bez dalších voleb) například pod jménem "Play Random Track".
tell application "iTunes" set theLibrary to (name of first source) as Unicode text tell source theLibrary tell playlist theLibrary to play some track with once end tell end tell
Zkopírovat jako archiv (4 KB)
Tato skriptová aplikace spustí iTunes, náhodně vybere skladbu a jednou ji přehraje. Trochu odbočím od tématu, všimněte si, že ve skriptu nejprve zjišťuji jméno knihovny, mohl bych sice rovnou napsat tell source "Knihovna", problém by ovšem nastal u iTunes v libovolné jiné lokalizaci než české. Proto využiji skutečnosti, že knihovna je vždy první položka ve zdroji (Source) a dotážu se na její lokalizované jméno, které předám příkazu tell.
Druhý příklad již naznačí praktické využití například v počítačové síti, kde si její uživatelé často vyměňují soubory. Vytvoříme si skript, který bude hlídat obsah nějaké složky a informovat uživatele, zjistí-li v ní nějaký obsah. Postupujte shodně jako u příkladu předešlého.
tell application "Finder" set theContents to count every item of folder ¬ "Macintosh HD:Users:Formanek:Desktop:Sample:" end tell if (theContents = 1) then display dialog "Hlídaná složka obsahuje novou položku." buttons {"Budiž"} ¬ default button 1 else if (theContents > 1) then display dialog "Hlídaná složka obsahuje nové položky." buttons {"Budiž"} ¬ default button 1 end if
Zkopírovat jako archiv (4 KB)
Pochopitelně řetězec "Macintosh HD:Users:Formanek:Desktop:Sample:" musíte nahradit cestou k libovolné složce ve vašem počítači. Opět si dovolím trochu odbočit, v cestě ke složce lze zároveň použít i lokalizovaná jména (platí jen pokud pracujete s příkazy programu Finder), například "Macintosh HD:Users:Formanek:Desktop:Hlídaná složka:" se shoduje s "Macintosh HD:Uživatelé:Formanek:Plocha:Hlídaná složka:". Přesto doporučuji používat originální jména složek, kterým bude program "rozumět" v libovolném prostředí. Poznámka: Originální jména složek zjistíte spolehlivě například když poslední položku v cestě přetáhnete do okna programu Terminál (Terminal).
Posledním příkladem si nastíníme oblast využití, kterou by mohl požadovat jednotlivec připojený k Internetu. Kontrola webových stránek a zjišťování jejich změn zabírá čas, v řadě případů lze toto svěřit počítači. Existují internetové služby, které stránky hlídají, mnoho stránek využívá kanály RSS apod. Ale co když pro nás důležitá stránka kanál RSS nemá a interval ověřování internetovou službou je pro nás příliš dlouhý? Můžeme si vytvořit jednoduchý program, který takovou stránku zkopíruje a porovná s předchozí verzí umístěnou na našem disku. Takový program lze napsat přímo v prostředí shellu, následující kód je pro zpřístupnění většímu počtu uživatelů přepsán a okomentován v jazyce AppleScript. Znalci nechť omluví toto poněkud neelegantní řešení.
try do shell script "test -f /page.html" -- Existuje již nějaká verze souboru? Ne = chyba. do shell script "mv /page.html /page-old.html" -- Existující soubor se přejmenuje (-old). try do shell script "curl -s http://www.server.cz/page.html -o /page.html" -- Zkopíruje se aktuální verze stránky. try do shell script "diff -q /page-old.html /page.html" -- Soubory se porovnají. log "Soubor je beze změn." on error do shell script "open http://www.server.cz/page.html" -- Stránka se otevře v prohlížeči. log "Soubor byl změněn!" end try do shell script "rm /page-old.html" -- Smaže se stávající soubor *-old on error log "Chyba sítě." end try on error try do shell script "curl -s http://www.server.cz/page.html -o /page.html" -- Prvně zkopíruje stránku. end try end try
Zkopírovat jako archiv (4 KB)
Poznámka: Obsahuje-li adresa (URL) znak "&", je třeba jeho zápis ošetřit zpětným lomítkem. Ve výše uvedeném kontextu by zápis adresy "http://www.server.cz/index.php?page=1&lang=cz" mohl vypadat takto:
do shell script ¬ "curl -s http://www.server.cz/index.php?page=1\\&lang=cz -o /page.html"
Všechny tři ukázkové příklady si můžete ihned vyzkoušet. Pochopitelně musí fungovat i při manuálním spuštění. Můžete si též vyzkoušet jejich pravidelné spouštění z programu iCal. Všimněte si ještě jedné důležité věci společné všem třem příkladům – pokud není důvod, program se po spuštění sám ukončí aniž by provedl jakoukoliv akci. To je důležité, představte si třeba skript na kontrolu složky, který by nám každých deset minut oznamoval, že složka je stále prázdná. V příštím díle se již budeme věnovat jediné věci – naučíme se programy automaticky spouštět v časovém intervalu a spravovat spuštěné úlohy. Popřemýšlejte zatím nad dalšími úlohami, které by šlo obdobě automatizovat.
Obsah seriálu (více o seriálu):
Tématické zařazení:
» Rubriky » Tipy a Triky