Projekty s nedostatkem práce

Sekce pro všeobecné rady a návody z oblasti DC projektů
Zpráva
Autor
nenym
78.9473684211 %
78.9473684211 %
Příspěvky: 7610
Registrován: úte 13 led, 2009 15:33
rok narození: 0- 0-1956
ID CNT statistics: 10124

Projekty s nedostatkem práce

#1 Příspěvek od nenym »

Pro zajištění práce z projektů, které jí mají nedostatek, lze využít schedulerů ze systémových nástrojů operačních systémů.

1. Windows: Systémové nástroje - naplánované úlohy, aplikace je součástí základní instalace systému

2. Ubuntu (ostatní Linuxy neznám, snad to bude obdobné): Systémové nástroje - Scheduled tasks, nutno doinstalovat z menu Aplikace - přidat/odstranit. Na Linuxu lze využít základního scheduleru cron, uvedená aplikace je zjednodušené a intuitivní grafické rozhraní ke cronu.

Ovládání mají obě aplikace téměř shodné, spouštěný příkaz je identický. Například pro LHC
1. Windows: cesta_k_boinc/boinccmd.exe --project http://lhcathomeclassic.cern.ch/sixtrack/ update
2. Ubuntu: ~/BOINC/boinccmd --project http://lhcathomeclassic.cern.ch/sixtrack/ update

Interval spouštění musí respektovat povolený interval dotazů na konkrétním projektu a to, že po takto vyvolaném dotazu další generuje klient sám. Většině projektů je to jedno a snesou otravování v 30s intervalu (tj. 1x za minutu scheduler, po 30s vyvolá dotaz sám klient). Výjimku tvoří (z těch nejpopulárnějších s nedostatkem práce) Ralph a The Lattice, kde jsem vypozoroval jako nejméně škod páchající interval 60 minut.

Tímto způsobem lze automatizovat i jiné záležitosti, například odevzdávání práce koncem turnaje PG, jako náhrada za featuru <report_results_immediately> v cc_config.

Přehled příkazů boinccmd je na našem fóru v sekci FAQ.
URL projektů lze jednoduše vygenerovat z Vítkova nástroje na mazání dluhů, dále jsou dostupné na stránkách projektů, v seznamu projektů či v souboru client_state.xml.
Blíží se konsolidační balíček pětikolky; šetřím trojbojem - piji staré víno, jím plesnivé sýry a jezdím v autě bez střechy.
UotD 767x Obrázek
1xObrázek 3xObrázek 9xObrázek 12xObrázek Obrázek
Obrázek

Uživatelský avatar
Ondra@SF.cz
36.8421052632 %
36.8421052632 %
Příspěvky: 597
Registrován: pon 22 úno, 2010 16:36
rok narození: 09 úno 1993
ID CNT statistics: 8123
Bydliště: Space Family
Kontaktovat uživatele:

Re: Projekty s nedostatkem práce

#2 Příspěvek od Ondra@SF.cz »

Návod je pěkný, ale žádný z mých pokusů o rozběhání se mi nevyvedl 33aaa ...

Mám Ubuntu 10.4, nainstalovaný Scheduled Tasks, nainstalovaný BOINC z REPOZITÁŘŮ a nevím, jaký tam mám zadat příkaz...chci, aby se každou minutu aktualizovalo WCG (kvůli DDDT2), ale nedělá to vůbec nic.
Soubor boinccmd.exe je umístěn v adresáři /usr/bin, složka s BOINC daty je umístěna ve /var/lib/boinc-client.

Jaký mám zadat příkaz? Zkoušel jsem ten tvůj s tím, že místo Mopac jsem zadal www.worldcommunitygrid.org a místo -/BOINC/ jsem zadal /usr/bin/ ... :smt102

Poradí někdo 33aaa ?
Pocitadlo : Deska - ASRock Fatal1ty Z77 Killer, CPU - Intel Pentium G3220(Haswell), 8GB RAM DDR3, GPU - ASUS DCIIOC AMD Radeon HD7790, Case - Chieftec LBX-02B-B-B, zdroj Seasonic X-1050 Gold, systém - dualboot ArchLinux (AntergOS) + Windows 8.1 64bit
Moje statistiky : BoincStats, B.Mundayweb, PrimeGrid a statistiky CNT od vklibera ;)
PG medaile : Obrázek Obrázek Obrázek Obrázek Obrázek Obrázek Obrázek Obrázek Obrázek
WCG medaile : ObrázekObrázekObrázekObrázekObrázekObrázekObrázekObrázek
Poslouchám asi tak tohle (my Last.fm music profile)...
Obrázek

Uživatelský avatar
forest
Admin webu a fóra CNT
Admin webu a fóra CNT
Příspěvky: 19635
Registrován: pát 27 říj, 2006 10:19
rok narození: 03 bře 1977
ID CNT statistics: 71
Bydliště: Újezd u Brna

Re: Projekty s nedostatkem práce

#3 Příspěvek od forest »

Musíš si najít a zadávat hlavně správnou adresu na scheduler. U WCG je to adresa grid.worldcommunitygrid.org

nenym
78.9473684211 %
78.9473684211 %
Příspěvky: 7610
Registrován: úte 13 led, 2009 15:33
rok narození: 0- 0-1956
ID CNT statistics: 10124

Re: Projekty s nedostatkem práce

#4 Příspěvek od nenym »

Ondra@SF.cz píše: ale nedělá to vůbec nic.
Ani v messages nemáš žádnou reakci? Pokud ne, tak máš buď špatně cestu do adresáře Boinc nebo špatnou adresu WCG. Pokud máš v messages reakci od WCG (...no work sent), tak je formálně vše v pořádku a "pouze" není práce.
Formální správnost nejlépe otestuješ tak, že zadaný task spustíš ručně a v BM při otevřené záložce messages pozoruješ reakci.
Ověřit správnost cesty k boinc lze jednoduše - jako projekt zadáš něco, o čem víš s jistotou, že reaguje, může to být klidně suspendnutý projekt.
Blíží se konsolidační balíček pětikolky; šetřím trojbojem - piji staré víno, jím plesnivé sýry a jezdím v autě bez střechy.
UotD 767x Obrázek
1xObrázek 3xObrázek 9xObrázek 12xObrázek Obrázek
Obrázek

Uživatelský avatar
Ondra@SF.cz
36.8421052632 %
36.8421052632 %
Příspěvky: 597
Registrován: pon 22 úno, 2010 16:36
rok narození: 09 úno 1993
ID CNT statistics: 8123
Bydliště: Space Family
Kontaktovat uživatele:

Re: Projekty s nedostatkem práce

#5 Příspěvek od Ondra@SF.cz »

nenym píše:
Ondra@SF.cz píše: ale nedělá to vůbec nic.
Ani v messages nemáš žádnou reakci? Pokud ne, tak máš buď špatně cestu do adresáře Boinc nebo špatnou adresu WCG. Pokud máš v messages reakci od WCG (...no work sent), tak je formálně vše v pořádku a "pouze" není práce.
Nenene, nedělá to vůbec nic...zkusím to s tou jinou adresou scheduleru, to bude nejspíš ono...
Pocitadlo : Deska - ASRock Fatal1ty Z77 Killer, CPU - Intel Pentium G3220(Haswell), 8GB RAM DDR3, GPU - ASUS DCIIOC AMD Radeon HD7790, Case - Chieftec LBX-02B-B-B, zdroj Seasonic X-1050 Gold, systém - dualboot ArchLinux (AntergOS) + Windows 8.1 64bit
Moje statistiky : BoincStats, B.Mundayweb, PrimeGrid a statistiky CNT od vklibera ;)
PG medaile : Obrázek Obrázek Obrázek Obrázek Obrázek Obrázek Obrázek Obrázek Obrázek
WCG medaile : ObrázekObrázekObrázekObrázekObrázekObrázekObrázekObrázek
Poslouchám asi tak tohle (my Last.fm music profile)...
Obrázek

Uživatelský avatar
petnek
Moderátor
Moderátor
Příspěvky: 3669
Registrován: pon 28 led, 2008 12:44
rok narození: 16 kvě 1987
ID CNT statistics: 10883
Bydliště: Tábor
Kontaktovat uživatele:

Re: Projekty s nedostatkem práce

#6 Příspěvek od petnek »

Tak udice na DrugDiscovery nefunguje jak má. Spustil jsem ji manuálně a čekal jsem, že se spustí za dalších 5 minut a ono nic. Je nastavena tak, že se spouští po spuštění systému a potom každých 5 minut bez omezení pokud je k dispozici jakékoli síťové připojení. Kde je tedy chyba? Restartovat systém se mi kvůli tomu nechce (WUs bez checkpointu a mnoho rozpočítaných úloh - velká ztráta).

Nejde taky nějakým parametrem nastavit, aby vždycky neprobliklo okno s bat souborem, ve kterém je onen příkaz pro aktualizaci napsán? Při více projektech a častém opakování by to mohlo dosti rušit :lol:
Obrázek

nenym
78.9473684211 %
78.9473684211 %
Příspěvky: 7610
Registrován: úte 13 led, 2009 15:33
rok narození: 0- 0-1956
ID CNT statistics: 10124

Re: Projekty s nedostatkem práce

#7 Příspěvek od nenym »

Probliknutí - spouštěj to jako SYSTEM, nikoli user.
Opakování úlohy - podívej se do plánu, kdy bude další spuštění, píše to. Pokud nepíše do 5 minut, tak máš chybu v zadání plánu. Já nedělám plán spuštění po startu, stejně je to k ničemu, protože core má dost starostí samo se sebou, mám plán od 0:0x:xx v daném intervalu tak, aby se jednotlivé úlohy nespouštěly ve stejný okamžik. Restart stroje určitě nepomůže, scheduler ve W7 je obzvláště odporný, nesrozumitelný a nepřehledný, zlatá XP. V prvním kole bych zkusil vykopnout podmínku na existující síťové připojení.
Ještě je tam kdesi jeden fígl - vypnout úlohu, když běží XX hodin, defaultně je tam nastaveno 72 hodin. Vyřadit z činnosti toto omezení.
Blíží se konsolidační balíček pětikolky; šetřím trojbojem - piji staré víno, jím plesnivé sýry a jezdím v autě bez střechy.
UotD 767x Obrázek
1xObrázek 3xObrázek 9xObrázek 12xObrázek Obrázek
Obrázek

Uživatelský avatar
petnek
Moderátor
Moderátor
Příspěvky: 3669
Registrován: pon 28 led, 2008 12:44
rok narození: 16 kvě 1987
ID CNT statistics: 10883
Bydliště: Tábor
Kontaktovat uživatele:

Re: Projekty s nedostatkem práce

#8 Příspěvek od petnek »

User > SYSTEM - nastaveno :)
podmínka síťového připojení a vypnutí běžící úlohy vypnuto. Nastavil jsem to tak, že se mi to bude spouštět každý den ve 23:10 a pak každých 5 minut, bez omezení. Další spuštění už je tam psáno, takže to je OK. Pokud ale pustím PC ve 23:15 a aktivuji úlohu ručně, bude se pak každých 5 minut opakovat?
Obrázek

nenym
78.9473684211 %
78.9473684211 %
Příspěvky: 7610
Registrován: úte 13 led, 2009 15:33
rok narození: 0- 0-1956
ID CNT statistics: 10124

Re: Projekty s nedostatkem práce

#9 Příspěvek od nenym »

Musíš ještě nastavit dobu trvání - 24 hodin nebo do kolika to chceš, pokud to 6 ráno, tak 7 hodin. Tak nějak to nastavuji. Možná, že jsou i jiné způsoby, W7 schedluler je tak složitý, že nepochybně, v XP těch možností moc není a jde tam pouze zadat.
- dny v týdnu
- okamžik spuštění
- interval opakování
- doba trvání (od prvního spuštění) nebo do kdy má být úloha spuštěna (stejně se to přepočte na dobu trvání)
Případně lze zadat i více plánů spouštění.
Ruční spuštění úlohy nemá na plán vliv.
Blíží se konsolidační balíček pětikolky; šetřím trojbojem - piji staré víno, jím plesnivé sýry a jezdím v autě bez střechy.
UotD 767x Obrázek
1xObrázek 3xObrázek 9xObrázek 12xObrázek Obrázek
Obrázek

Uživatelský avatar
petnek
Moderátor
Moderátor
Příspěvky: 3669
Registrován: pon 28 led, 2008 12:44
rok narození: 16 kvě 1987
ID CNT statistics: 10883
Bydliště: Tábor
Kontaktovat uživatele:

Re: Projekty s nedostatkem práce

#10 Příspěvek od petnek »

Uvidím jak to bude šlapat až PC znovu zapnu...

PS: nefungují mi udičky pro Lattice a uFluids. Zadával jsem adresy z domény projekty, ale nefungují. Jaké mám zadat nebo kde to zjistit? Zkoušel jsem i adresu scheduleru z client_state.xml, ale nejde to. :roll:
Obrázek

nenym
78.9473684211 %
78.9473684211 %
Příspěvky: 7610
Registrován: úte 13 led, 2009 15:33
rok narození: 0- 0-1956
ID CNT statistics: 10124

Re: Projekty s nedostatkem práce

#11 Příspěvek od nenym »

Bohužel ve W7 ti se schedulerem moc neporadím. Pravidlo pro identifikaci oblasti vadného zadání je takové:
1. když není reakce v messages BM na ruční spuštění úlohy, tak je problém v parametrech úlohy (vadná cesta k adresáři Boinc, chybná adresa projektu nebo ve WCG scheduleru, překlep v parametru)
2. pokud je reakce v BM na ručně spuštěnou úlohu, je vadně zadán plán spouštění ve scheduleru
Já osobně to dělám tak, že kopíruji fungující úlohu a měním jí parametry, pak může být chyba pouze v zadání parametrů úlohy a plán scheduleru je dobře.
Jaký přesně máš problém ty?
Blíží se konsolidační balíček pětikolky; šetřím trojbojem - piji staré víno, jím plesnivé sýry a jezdím v autě bez střechy.
UotD 767x Obrázek
1xObrázek 3xObrázek 9xObrázek 12xObrázek Obrázek
Obrázek

Uživatelský avatar
petnek
Moderátor
Moderátor
Příspěvky: 3669
Registrován: pon 28 led, 2008 12:44
rok narození: 16 kvě 1987
ID CNT statistics: 10883
Bydliště: Tábor
Kontaktovat uživatele:

Re: Projekty s nedostatkem práce

#12 Příspěvek od petnek »

Já kopíruji již funkční bat soubory s udičkami a v nich měním adresu. Kopíroval a upravil jsem funkční, ale na dva zmiňované projekty nefunguje ani ruční spuštění baťáku. Myslím, že chyba bude v adrese.
Obrázek

nenym
78.9473684211 %
78.9473684211 %
Příspěvky: 7610
Registrován: úte 13 led, 2009 15:33
rok narození: 0- 0-1956
ID CNT statistics: 10124

Re: Projekty s nedostatkem práce

#13 Příspěvek od nenym »

Zkus main url z client_state, to by mělo být přesně to, co potřebuješ.
Blíží se konsolidační balíček pětikolky; šetřím trojbojem - piji staré víno, jím plesnivé sýry a jezdím v autě bez střechy.
UotD 767x Obrázek
1xObrázek 3xObrázek 9xObrázek 12xObrázek Obrázek
Obrázek

Uživatelský avatar
petnek
Moderátor
Moderátor
Příspěvky: 3669
Registrován: pon 28 led, 2008 12:44
rok narození: 16 kvě 1987
ID CNT statistics: 10883
Bydliště: Tábor
Kontaktovat uživatele:

Re: Projekty s nedostatkem práce

#14 Příspěvek od petnek »

Ne, prostě to nefunguje :lol:

udička na uFluids (nefunguje, url z client_state.xml - master url):

Kód: Vybrat vše

"C:\Program Files\BOINC\boinccmd.exe"  --project http://www.ufluids.net -update
udička na DrugDiscovery (funguje, url také z client_state.xml):

Kód: Vybrat vše

"C:\Program Files\BOINC\boinccmd.exe"  --project http://boinc.drugdiscoveryathome.com/ update
22sss
Obrázek

nenym
78.9473684211 %
78.9473684211 %
Příspěvky: 7610
Registrován: úte 13 led, 2009 15:33
rok narození: 0- 0-1956
ID CNT statistics: 10124

Re: Projekty s nedostatkem práce

#15 Příspěvek od nenym »

Nojo, "-update" není totéž, co "update". Takže překlep.
Blíží se konsolidační balíček pětikolky; šetřím trojbojem - piji staré víno, jím plesnivé sýry a jezdím v autě bez střechy.
UotD 767x Obrázek
1xObrázek 3xObrázek 9xObrázek 12xObrázek Obrázek
Obrázek

Uživatelský avatar
petnek
Moderátor
Moderátor
Příspěvky: 3669
Registrován: pon 28 led, 2008 12:44
rok narození: 16 kvě 1987
ID CNT statistics: 10883
Bydliště: Tábor
Kontaktovat uživatele:

Re: Projekty s nedostatkem práce

#16 Příspěvek od petnek »

No jo, tím to bylo. Tak šup s kbelíkem popela na mou lébu :lol:. Díky :)
Obrázek

Uživatelský avatar
Arogant
26.3157894737 %
26.3157894737 %
Příspěvky: 235
Registrován: pát 03 dub, 2009 18:27
rok narození: 0- 0-1981
ID CNT statistics: 17227
Bydliště: Plzeň

Re: Projekty s nedostatkem práce

#17 Příspěvek od Arogant »

Pěkně prosím zvládnul by někdo napsat návod pro blbce jak na Plánovač úloh v W7? Trápím se s tím přes p§l hodiny a netuším jak na to. V XP jsem si s tím poradil ale tady ne. Děkuju moc.
ObrázekObrázek

Uživatelský avatar
petnek
Moderátor
Moderátor
Příspěvky: 3669
Registrován: pon 28 led, 2008 12:44
rok narození: 16 kvě 1987
ID CNT statistics: 10883
Bydliště: Tábor
Kontaktovat uživatele:

Re: Projekty s nedostatkem práce

#18 Příspěvek od petnek »

Nejdřív jsem si udělal v plánovači složku BOINC, kde mám naplánované úlohy hádejte pro co..? Těžká otázka, já vím :lol: ...

Pro zjednodušení přikládám dva soubory:
BOINCDrug.pdf
(93 bajtů) Staženo 765 x
Nelekejte se, není to PDF, ale bat. Takže po stažení to přejmenujete na BOINCDrug.bat. Přípony bat, txt nejsou pro vkládání na forum povoleny...
MindModeling.pdf
(3.29 KiB) Staženo 695 x
Tohle opět není PDF, ale xml. Takže po stažení také přejmenovat...

V plánovači úloh dáte importovat úlohu v pravém panelu a vyberete MindModeling.xml (pojmenujte si to jak chcete - exportoval jsem svoje nastavení pro MindModeling...) > otevře se nabídka Vytvořit úlohu > Název: jaký chcete. Já si úlohu pojmenovávám podle projektu ke kterému patří > Záložka Aktivační události: Označit v nabídce jedinou a dole Upravit > Je nastavena tak, že se spouští pořád, každých 10 minut. To si můžete změnit dle libosti > potvrdit změny > Záložka Akce > označíte Spustit program (jediná akce v nabídce) a dáte Upravit > program či skript, respektive jeho adresu navedete tam, kde je váš stažený BOINCDrug.bat (doporučuji ho přejmenovat zase podle názvu projektu - pro přehlednost). Tento bat soubor obsahuje příkaz, který spouští aktualizaci projektu v BM. Koukněte se do něj a případně upravte adresu k boinccmd.exe. Musí směřovat do adresáře s nainstalovaným BM, nikoli do datového adresáře, který je v C:/ProgramData! Upravte také adresu projektu, kterou najdete tak jak nenym vysvětluje v prvním příspěvku dole. Po přizpůsobení bat souboru ho vyberte v plánovači úloh a potvrďte. Záložky Podmínky a Nastavení měnit nemusíte, mě to tak funguje, vám by mělo taky... Pak už jen "OK" a je naplánována. Po odklepnutí OK se může stát, že bude úloha zastavena. Tedy na ni klikneme a v pravém sloupečku v plánovači úloh dáme Povolit. Pokud následně dáte v pravém sloupečku Spustit, úloha se provede a v BOINC Manageru by se u projektu měla objevit hláška o vyžádané aktualizaci projektu uživatelem stejně jako když projekt vyberete a dáte Aktualizovat.

Toť vše, nahoďte udice a přeji co nejlepší úlovky 22rrr
Obrázek

nenym
78.9473684211 %
78.9473684211 %
Příspěvky: 7610
Registrován: úte 13 led, 2009 15:33
rok narození: 0- 0-1956
ID CNT statistics: 10124

Re: Projekty s nedostatkem práce

#19 Příspěvek od nenym »

Na core rodiny 7 udice většinou nefunguje, jak na exoty netuším. Vymyslel někdo něco zautomatizovatelného :?:
Blíží se konsolidační balíček pětikolky; šetřím trojbojem - piji staré víno, jím plesnivé sýry a jezdím v autě bez střechy.
UotD 767x Obrázek
1xObrázek 3xObrázek 9xObrázek 12xObrázek Obrázek
Obrázek

nenym
78.9473684211 %
78.9473684211 %
Příspěvky: 7610
Registrován: úte 13 led, 2009 15:33
rok narození: 0- 0-1956
ID CNT statistics: 10124

Re: Projekty s nedostatkem práce

#20 Příspěvek od nenym »

nenym píše:Na core rodiny 7 udice většinou nefunguje, jak na exoty netuším. Vymyslel někdo něco zautomatizovatelného :?:
Ano, pro widle i Linux vkliber. Automat na udržování předem definovaného počtu tasků v aktivním stavu, zbytek suspendnut. Takto je core pořád hladové a udice si pořád říká o práci na žádanějších projektech.
Widle:

Kód: Vybrat vše

/*!
    Autor : Vit Kliber, Czech National Team o.s.
Vytvoreno : 11.01.2012
    Nazev : boinc_manage_wcg_tasks.js
    Zdroj : boinc_framework.js
    Popis : Skript vychazi z Kostry skriptu pro budouci skripy pro manipulaci s jednotkami
            ( url=http://forum.czechnationalteam.cz/viewtopic.php?p=53537#p53537 )
            Tento provadi manipulaci s jednotkami projektu WCG ( http://www.worldcommunitygrid.org/ )
            Pozadavek je nasledujici : nechat pocitat maximalne 8 <pocet_aktivnich_jednotek> jednotky
            a ostatni pozastavit
*/

// adresa projektu (nejpravdepodobneji bude skript manipulovat s jednotkami jednoho projektu)
var projekt = "http://www.worldcommunitygrid.org/";

// pocet maximalne aktivnich jednotek
var pocet_aktivnich_jednotek = 8;

// verze boinc, je zjistena funkci verze(), pokud je prazdne nepodarilo se zjistit a skript se ukonci
var boinc_verze = "";

// prikaz pro zjisteni aktualnich jednotek v BOINC
var boinc_jednotky = "";

// prikaz pro manipulaci s jednotkou
var boinc_jednotka = "";

// 1 = Debug ON, 0 = Debug OFF ... jestli se maji vypisovat pri behu hlaseni
var debug_code = 1;

// pro vypsani ladiciho textu pri behu skriptu
function alert(text)
{
  if (debug_code != 1)
  {
    return (new ActiveXObject("WScript.Shell")).Popup(text, 0, WScript.ScriptName, 64);
  }
}

// zjisti verzi BOINC
function verze()
{
  // definice noveho objektu WScript.Shell (umozni mi spoustet externi prikazy)
  var objekt_shell = new ActiveXObject("WScript.Shell");
  // definice metody Exec, spusti prikaz a pointer uchova v promene <objekt_exec>
  var objekt_exec  = objekt_shell.Exec("boinccmd.exe --version");
  // textova promena do ktere se ulozi cely obsah standardniho vystupu predchazejiciho prikazu
  var verze_text   = objekt_exec.StdOut.ReadAll();
  alert(verze_text);
  // promena <verze_text> by mela nyni obsahovat jeden radek s timto obsahem (podle verze) : "boinccmd,  built from BOINC 6.12.33"
  // uchovam pozici textu BOINC z promene <verze_text>
  var pozice = verze_text.indexOf("BOINC");
  // jestlize je ruzne od -1 tak v obsahu <verze_text> je na pozici <pozice> text BOINC (podarilo se spustit prikaz "boinccmd.exe --version")
  if (pozice != -1)
  {
    // z <verze_text> vyriznu text od pozice <pozice> (prictu 6 ... delka textu BOINC a mezera)
    boinc_verze = verze_text.substr(6+pozice);
    // nyni je v <boinc_verze> hodnota 6.12.33
    alert(boinc_verze);
    return true;
  }
  else // verzi BOINC se nepodarilo zjistit, vracim FALSE
  {
    return false;
  }
}

// funkce pro porovnani dvou verzi ve tvaru X.X.X, ocekava promene ve tvaru pole
function porovnani_verzi(verze1, verze2)
{
  // promenne <verze1> a <verze2> jsou pole textovych retezcu, tak je prevedu na cisla
  verze1[0] = (parseInt(verze1[0]) || 0);
  verze1[1] = (parseInt(verze1[1]) || 0);
  verze1[2] = (parseInt(verze1[2]) || 0);
  verze2[0] = (parseInt(verze2[0]) || 0);
  verze2[1] = (parseInt(verze2[1]) || 0);
  verze2[2] = (parseInt(verze2[2]) || 0);
  if (verze2[0] != verze1[0])
    return (verze2[0] > verze1[0]);
  else
  {
    if (verze2[1] != verze1[1])
      return (verze2[1] > verze1[1]);
    else
    {
      if (verze2[2] != verze1[2])
        return (verze2[2] > verze1[2]);
      else
        return true;
    }
  }
}

// odstrani z retezce koncove mezery a znak konce radku
function trim(text)
{
  return text.replace(new RegExp("[" + "\\n\\s" + "]+$", "g"), "");
}

// provede nastaveni promenych podle verze BOINC
function init()
{
  // od verze BOINC 6.12 vcetne je jina syntaxe programu boinccmd
  var verze_pro_porovnani = "6.12.0";
  // zavolam funkci ktera zjisti verzi BOINC a pokud se to podari nastavim zakladni promenne
  if (verze())
  {
    alert("Porovnavam verzi " + boinc_verze + " s referencni verzi " + verze_pro_porovnani);
    if (porovnani_verzi(verze_pro_porovnani.split('.'),boinc_verze.split('.')))
    {
      // Verze BOINC >= 6.12
      boinc_jednotky = "boinccmd.exe --get_tasks";
      boinc_jednotka = "boinccmd.exe --task";
    }
    else
    {
      // Verze BOINC <  6.12
      boinc_jednotky = "boinccmd.exe --get_results";
      boinc_jednotka = "boinccmd.exe --result";
    }
    return true;
  }
  else // funkce pro zjisteni verze se nepodarila, vracim FALSE
  {
    return false;
  }
}

/* MAIN */
// zavolam funkci ktera nastavi zakladni promenne
if (init())
{
  // v tuto chvili je uspesne zjistena verze a
  // uspesne nastavene zakladni promenne <boinc_jednotky> a <boinc_jednotka>
  // definuji novy objekt WScript.Shell (umozni mi spoustet externi prikazy)
  var objekt_shell = new ActiveXObject("WScript.Shell");
  // definuji metodu Exec, spusti prikaz <boinc_jednotky> a pointer uchova v promene <objekt_exec>
  var objekt_exec  = objekt_shell.Exec(boinc_jednotky);
  // textova promena do ktere se ulozi cely obsah standardniho vystupu predchazejiciho prikazu
  var text_vystup  = objekt_exec.StdOut.ReadAll();
  // na konec <text_vystup> jeste pridam jednu prazdnou sekci abych pak nemusel resit konec 
  text_vystup = text_vystup + '\n' + "X) -----------" + '\n';
  // promena <text_vystup> by mela nyni obsahovat cely standardni vystup ktery vraci prikaz "boinccmd.exe --get_tasks"
  // definuji pole do ktereho prevedu obsah <text_vystup>
  var pole_vystup  = new Array();
  // oddelovacem bude znak EOL (EndOfLine) neboli \n
  // pole <pole_vystup> se naplni tak, ze kazdy dalsi radek bude v dalsim prvku
  // 1. radek v  pole_vystup[0], 2. radek v  pole_vystup[1], ...
  pole_vystup = text_vystup.split('\n');
  // nyni musime v cyklu projit vsechny radky (vyzaduje znalost vystupu "boinccmd.exe --get_tasks")
  // jednotlive jednotky jsou oddeleny v sekcich a o kterou jednotku se jedna zjistime az uvnitr sekce
  // takze si do nejakych promenych musime ukladat co budeme dale potrebovat a az sekce skonci
  // (zacne nova ... proto jsme si na konec pridali jednu prazdnou sekci pro ukonceni posledni sekce)
  // tak se rozhodneme podle obsahu ulozenych promenych co dal podnikneme
  // pripravim si promenne
  var b_name              = ""; // nazev jednotky (name)
  var b_state             = ""; // stav jednotky (state) 2 ... Pocita nebo Pripraven nebo Cekam na zpracovani, 4 ... Odesilam, 5 ... Odeslan. Pripraven k ohlaseni
  var b_scheduler_state   = ""; // stav scheduleru jednotky (scheduler state) 0 ... Pripraven, 1 ... Cekam na zpracovani, 2 ... Pocita
  var b_suspended_via_GUI = ""; // pozastaveno (suspended via GUI) no, yes
  var b_active_task_state = ""; // stav jednotky (active_task_state) 0 ... Pripraven, 1 ... Pocitam, 9 ... Cekam na zpracovani
  var ano                 = 0;  // 1 = ANO, 0 = NE ... jestli se jedna o projekt ktery nas zajima
  var ind                 = 0;  // index pro pole do ktereho budu ukladat hodnoty
  var jednotka = new Array();   // pole do ktereho se budou ukladat radky
                                // kazdy radek bude zase pole ve tvaru ([0] = name, [1] = state, [2] = scheduler_state, [3] = suspended_via_GUI, [4] = active_task_state)

  // a ted cyklus pres cele pole
  for(var i = 0; i < pole_vystup.length; i++)
  {
    // jestlize radek obsahuje text ") -----------" tak se jedna o zacatek nove sekce
    if (pole_vystup[i].indexOf(") -----------") != -1)
    {
      // jestlize je <ano> nastaveno (jedna se o projekt ktery nas zajima) je treba provest pozadovanou akci
      if (ano == 1) {
        alert("NACITANI JEDNOTEK (" + ind + ") :\nProjekt:" + projekt + "\nJednotka:" + b_name + "\nStav:" + b_state + "\nStav scheduleru:" + b_scheduler_state + "\nsuspended_via_GUI:" + b_suspended_via_GUI + "\nactive_task_state:" + b_active_task_state);
        // dale me budou zajimat pouze jednotky ktere maji stav jednotky = 2 (state), ty ktere jsou ve stavu Odesilam nebo Odeslany uz resit nebudu
        if (b_state == 2 || b_state == "downloaded") {
          // ulozim hodnoty do pole
          jednotka[ind] = new Array(b_name, b_state, b_scheduler_state, b_suspended_via_GUI, b_active_task_state);
          // a zvednu index o 1
          ind = ind + 1;
        }
      }
      // a po akci si opet vynulujeme promenne
      b_name              = "";
      b_state             = "";
      b_scheduler_state   = "";
      b_suspended_via_GUI = "";
      b_active_task_state = "";
      ano                 = 0;
    }
    // jestlize radek obsahuje text "   name: " tak se jedna o radek kde je nazev jednotky
    else if (pole_vystup[i].indexOf("   name: ") != -1)
    {
      // a nazev jednotky si uchovam do <b_name>
      b_name = trim(pole_vystup[i].substr(9));
    }
    // jestlize radek obsahuje text "   state: " tak se jedna o radek kde je stav jednotky
    else if (pole_vystup[i].indexOf("   state: ") != -1)
    {
      // a stav jednotky si uchovam do <b_state>
      b_state = trim(pole_vystup[i].substr(10));
    }
    // jestlize radek obsahuje text "   scheduler state: " tak se jedna o radek kde je stav scheduleru jednotky
    else if (pole_vystup[i].indexOf("   scheduler state: ") != -1)
    {
      // a stav scheduleru jednotky si uchovam do <b_scheduler_state>
      b_scheduler_state = trim(pole_vystup[i].substr(20));
    }
    // jestlize radek obsahuje text "   suspended via GUI: " tak se jedna o radek kde je informace o pozastaveni jednotky
    else if (pole_vystup[i].indexOf("   suspended via GUI: ") != -1)
    {
      // a informaci o pozastaveni jednotky si uchovam do <b_suspended_via_GUI>
      b_suspended_via_GUI = trim(pole_vystup[i].substr(22));
    }
    // jestlize radek obsahuje text "   active_task_state: " tak se jedna o radek kde je informace o active_task_state
    else if (pole_vystup[i].indexOf("   active_task_state: ") != -1)
    {
      // a informaci o active_task_state si uchovam do <active_task_state>
      b_active_task_state = trim(pole_vystup[i].substr(22));
    }
    // jestlize radek obsahuje text "   project URL: " tak se jedna o radek kde je adresa projektu
    else if (pole_vystup[i].indexOf("   project URL: ") != -1)
    {
      // a jestli radek obsahuje i adresu projektu ktery me zajima, tak si nastavim <ano>
      if (pole_vystup[i].indexOf("   project URL: " + projekt) != -1)
      {
        ano = 1;
      }
      else
      {
        ano = 0;
      }
    }
  }
  // jestlize je pole naplnene, tak <ind> bude vetsi nez 0
  if (ind > 0)
  {
/*
    // cele pole projdeme radek po radku a vypiseme
    for(var i = 0; i < ind; i++)
    {
      alert("VYPIS JEDNOTEK (" + i + ") :\nProjekt:" + projekt + "\nJednotka:" + jednotka[i][0] + "\nStav:" + jednotka[i][1] + "\nStav scheduleru:" + jednotka[i][2] + "\nsuspended_via_GUI:" + jednotka[i][3] + "\nactive_task_state:" + jednotka[i][4]);
    }
*/
    // pro nas pozadavek je ale vhodne prochazet pole od konce, a jednotky postupne pozastavit (nebo nechat pozastavene)
    // a teprve az se dostaneme na zacatek pole, tak prvnich nekolik jednotek pustit (nebo nechat pustenych)
    for(var i = ind-1; i >= 0; i--)
    {
      alert("VYPIS JEDNOTEK OD KONCE (" + i + ") :\nProjekt:" + projekt + "\nJednotka:" + jednotka[i][0] + "\nStav:" + jednotka[i][1] + "\nStav scheduleru:" + jednotka[i][2] + "\nsuspended_via_GUI:" + jednotka[i][3] + "\nactive_task_state:" + jednotka[i][4]);
      // v promenne <pocet_aktivnich_jednotek> je pocet jednotek ktere se maji pocitat
      if (i < pocet_aktivnich_jednotek)
      // vsechny jednotky ktere maji index <i> mensi nez <pocet_aktivnich_jednotek> pustime
      {
        // zjistime jestli je jednotka pozastavena
        if (jednotka[i][3] == "yes")
        {
          // a jestli ano tak ji pustime
          alert("Spoustim jednotku " + jednotka[i][0]);
          var resume_exec = objekt_shell.Exec(boinc_jednotka + " " + projekt + " " + jednotka[i][0] + " resume");
        }
      }
      else
      // vsechny ostatni pozastavime
      {
        // zjistime jestli neni jednotka pozastavena
        if (jednotka[i][3] == "no")
        {
          // a jestli neni tak ji pozastavime
          alert("Zastavuji jednotku " + jednotka[i][0]);
          var suspend_exec = objekt_shell.Exec(boinc_jednotka + " " + projekt + " " + jednotka[i][0] + " suspend");
        }
      }
    }
  }
}
alert("Konec.");
vkliber píše:Soubor uložit do stejného adresáře, kde je boinccmd.exe. Po uložení souboru WCG_manage.js na něj kliknout pravým tlačítkem myši a kliknout na "Vlastnosti". Ve vlastnostech se přepnout na kartu "Skript", zaškrtnout "Zastavit skript po:" a nastavit 10 sekund a odškrtnout "Zobrazit logo ...". Dále vytvořit zástupce ve stejném adresáři (chytnout soubor WCG_manage.js pravým tlačítkem myši, posunout a pustit a stisknout "Vytvořit zde zástupce". Vytvořeného zástupce přejmenovat na WCG_manage.js, dále na něj kliknout pravým tlačítkem a a kliknout na "Vlastnosti". Ve vlastnostech se přepnout na kartu "Zástupce", zkontrolovat jestli hodnota "Spustit v:" odpovídá adresáři ve kterém se nachází skript WCG_manage.js a nastavit "Spustit:" na hodnotu "V minimalizovaném okně".
Tím je připravený skript ke spuštění. Je možno odzkoušet tak, že spustíte BOINC Manager aktivujte "přebytečné" jednotky, a pak poklepete na WCG_manage.js. Jednotky by se měly označit jako pozastavené.

Dále je nutné zařadit skript WCG_manage.js do naplánovaných úloh ve Windows, tady se postup pro WinXP už výrazně liší od Vista a 7, proto ho nebudu podrobně popisovat. Každý ať si taky zvolí svůj časový plán.
Linux: prosím vklibera o doplnění, moje verze je velmi prapodivná - udělal jsem kdysi při úpravě pro Ubuntu 9.4 bez požadovaného shellu chybu, kterou jsem zamaskoval jinou, nějak to funguje, ale hluboce se za to stydím.
Naposledy upravil(a) nenym dne pát 15 kvě, 2015 10:21, celkem upraveno 1 x.
Důvod: Upraveno pro WCG a 8 jednotek by Cerberus
Blíží se konsolidační balíček pětikolky; šetřím trojbojem - piji staré víno, jím plesnivé sýry a jezdím v autě bez střechy.
UotD 767x Obrázek
1xObrázek 3xObrázek 9xObrázek 12xObrázek Obrázek
Obrázek

Odpovědět

Zpět na „Rady a návody“