Stránka 1 z 2

Projekty s nedostatkem práce

Napsal: pon 19 dub, 2010 10:49
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.

Re: Projekty s nedostatkem práce

Napsal: ned 20 čer, 2010 11:58
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 ?

Re: Projekty s nedostatkem práce

Napsal: pon 21 čer, 2010 06:14
od forest
Musíš si najít a zadávat hlavně správnou adresu na scheduler. U WCG je to adresa grid.worldcommunitygrid.org

Re: Projekty s nedostatkem práce

Napsal: pon 21 čer, 2010 10:38
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.

Re: Projekty s nedostatkem práce

Napsal: pon 21 čer, 2010 15:17
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...

Re: Projekty s nedostatkem práce

Napsal: stř 10 srp, 2011 21:58
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:

Re: Projekty s nedostatkem práce

Napsal: stř 10 srp, 2011 22:38
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í.

Re: Projekty s nedostatkem práce

Napsal: stř 10 srp, 2011 23:07
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?

Re: Projekty s nedostatkem práce

Napsal: stř 10 srp, 2011 23:11
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.

Re: Projekty s nedostatkem práce

Napsal: stř 10 srp, 2011 23:49
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:

Re: Projekty s nedostatkem práce

Napsal: čtv 11 srp, 2011 10:47
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?

Re: Projekty s nedostatkem práce

Napsal: čtv 11 srp, 2011 18:49
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.

Re: Projekty s nedostatkem práce

Napsal: čtv 11 srp, 2011 18:54
od nenym
Zkus main url z client_state, to by mělo být přesně to, co potřebuješ.

Re: Projekty s nedostatkem práce

Napsal: čtv 11 srp, 2011 19:54
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

Re: Projekty s nedostatkem práce

Napsal: čtv 11 srp, 2011 20:02
od nenym
Nojo, "-update" není totéž, co "update". Takže překlep.

Re: Projekty s nedostatkem práce

Napsal: čtv 11 srp, 2011 20:17
od petnek
No jo, tím to bylo. Tak šup s kbelíkem popela na mou lébu :lol:. Díky :)

Re: Projekty s nedostatkem práce

Napsal: stř 01 úno, 2012 20:14
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.

Re: Projekty s nedostatkem práce

Napsal: stř 01 úno, 2012 23:55
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 766 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 696 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

Re: Projekty s nedostatkem práce

Napsal: čtv 06 pro, 2012 20:32
od nenym
Na core rodiny 7 udice většinou nefunguje, jak na exoty netuším. Vymyslel někdo něco zautomatizovatelného :?:

Re: Projekty s nedostatkem práce

Napsal: čtv 06 lis, 2014 19:59
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.