Virtlab:Komponenty/CRON
Z VirtlabWiki
| Verze z 14:33, 5. 11. 2007 Dol72 (Diskuse | příspěvky) ← Předchozí porovnání  | 
				Verze z 04:35, 6. 11. 2007 Gry72 (Diskuse | příspěvky) Následující porovnání →  | 
			||
| Řádka 38: | Řádka 38: | ||
| atq | cut -f1 | while read A ; do if at -c $A | grep -q \"RES-RESID-\" ; then echo $A ; fi ; done | atq | cut -f1 | while read A ; do if at -c $A | grep -q \"RES-RESID-\" ; then echo $A ; fi ; done | ||
| + | === Nutná opatření při implementaci aktivačních/deaktivačních skriptů === | ||
| + | |||
| + | * testovat, zda aktivační/deaktivační skript skončil v rozumném čase | ||
| + | * testovat výsledek skriptu | ||
| [[Kategorie:Komponenty virtlabu]] | [[Kategorie:Komponenty virtlabu]] | ||
Verze z 04:35, 6. 11. 2007
Aktivační server (AS) byl nahrazen činností daemona atd, který je standardní součástí BSD/Linuxu. Tento daemon zajišťuje jednorázové spuštění úloh v zadanou dobu. Protože s názvem atd se v češtině špatně pracuje (vypadá to jako atakdále, nedá se to dobře skloňovat), bude dále z čistě jazykových důvodů referován jako cron (účelem podobný démon i když s jinou filosofií). Jediný, kdo s AS komunikoval, byl Rezervační server (RS), proto po odstranění AS se vše odehrává v RS.
Jsou prováděny pouze následující dvě operace:
Obsah | 
Zařazení rezervace do cron fronty
Soubor činností, které mají být vykonány v souvislosti s rezervací, je zapsán v externím programu (typicky Activator-script). Do fronty jsou zařazeny voláním funkce enqueue_cron, která je v současné době definována i použita ve zdrojovém textu virtlab/DISTR/src/rsv-server/src/commit_table.c. Její deklarace:
enqueue_cron(char *xid, char *resid, struct datetime from, char *format, ...)
- xid
 - označení transakce, je předáváno pouze pro potřeby ladicích výpisů
 - resid
 - řetězec označující rezervaci. Může být následně využit při odstranění rezervace z cron fronty. Doporučuje se do něj vkládat resid.
 - from
 - čas, kdy má být úloha spuštěna. Jde o strukturu popsanou v "datetime.h" sestávající s int hodnot year, month, day, hour, min
 - format
 - příkaz, který má být spuštěn formátovaný pro vsprintf.
 - ...
 - argumenty příkazu
 
Funkce je volána uvnitř drop_first_commit_into_db, což je místo, kde se úspěšná rezervace zaznamenává do databáze.
Příklad 1:
from.year=2007; from.month=11; from.day=4; from.hour=12; from.min=3;
enqueue_cron("ostrava.128.1194212742", "46@ostrava", from, "/opt/virtlab/activate.sh %s", tptr->resid.id);
enqueue_cron("ostrava.128.1194212742", "46@ostrava", from, "/opt/virtlab/deactivate.sh %s", tptr->resid.id);
Odstranění rezervace z cron fronty
Pokud byla rezervace zrušena, projeví se to ve funkci remove_reservation_from_db, která je ve zdrojovém textu virtlab/DISTR/src/rsv-server/src/dbutils.c a ve které se proto volá nová funkce unqueue_cron(char *xid, char *cronresid).
- xid
 - označení transakce, je předáváno pouze pro potřeby ladicích výpisů
 - cronresid
 - řetězec označující rezervaci, viz parametr resid funkce enqueue_cron.
 
Příklad 2:
unqueue_cron("ostrava.128.1194212749", "46@ostrava");
- Zdůrazněme, že funkce odstraní všechny úlohy, které byly cronu zadány s použitím cronresid (jako například v Příkladu 1).
 - Odstranění úlohy je náročná operace, která by neměla probíhat příliš často, neboť je interně realizována vyhledáváním cronresid grepováním mnoha malých souborů.
 
Troubleshooting
Kromě faktu, že obě funkce *queue_cron jsou velmi VLLOG výřečné, lze kontrolovat stav fronty pomocí příkazů at.
Vyhledání všech úkolů se známým resid
atq | cut -f1 | while read A ; do if at -c $A | grep -q \"RES-RESID-\" ; then echo $A ; fi ; done
Nutná opatření při implementaci aktivačních/deaktivačních skriptů
- testovat, zda aktivační/deaktivační skript skončil v rozumném čase
 - testovat výsledek skriptu
 
