Chová se to tak, že např na 4-core se stáhnou 4 jednotky, z toho 1 se úspěšně začne počítat a ostatní zahlásí chybu při stahování. Toto samozřejmě neovlivním, ale následující chování je takové, že po dopočítání té jedné úspěšné jednotky nedojde k odeslání ale na něco se čeká , jakmile však chybé jednotky ručně zruším, okamžitě dojde k odeslání jednotek a k příjmu nových.
Tak jsem si říkal že proč to rušit ručně když to může dopředu zušit nějaký skript který se dá do Naplánovaných úloh a bude se automaticky spouštět např. co 1 hodinu.
Je napsáno v JScriptu ... skriptovací jazyk (nadstavba nad JavaScriptem) ... pro windows (pro linux je to třeba přepsat do shellu nebo do perlu)
Verze pro Windows
nazval jsem to boinc_abort_wus.js v popisu je napsáno co s tím
Kód: Vybrat vše
/*!
Autor : Vit Kliber, Czech National Team o.s.
Vytvoreno : 06.01.2012
Nazev : boinc_abort_wus.js
Popis : Zrusi chybne BOINC jednotky projektu FreeHAL.
Nutno umistit do stejneho adresare kde se nachazi boinccmd a z tohoto adresare take spoustet
Podle verze BOINC je nutne zmenit hodnoty promenych boinc_prikaz a abort_prikaz :
zakomentovat/odkomentovat prislusne radky
*/
// prikaz pro zjisteni aktualnich jednotek v BOINC
// var boinc_prikaz = "boinccmd.exe --get_results"; // Verze BOINC < 6.12
var boinc_prikaz = "boinccmd.exe --get_tasks"; // Verze BOINC >= 6.12
// prikaz pro zruseni jednotky
// var abort_prikaz = "boinccmd.exe --result"; // Verze BOINC < 6.12
var abort_prikaz = "boinccmd.exe --task"; // Verze BOINC >= 6.12
// adresa projektu
var projekt = "http://www.freehal.net/freehal_at_home/";
// 1 = Debug ON, 0 = Debug OFF
var debug_code = 0;
// pro zobrazeni hlaseni pri vyvoji
function alert(text)
{
if (debug_code != 0)
{
return (new ActiveXObject("WScript.Shell")).Popup(text, 0, WScript.ScriptName, 64);
}
}
var objekt_shell = new ActiveXObject("WScript.Shell");
var objekt_exec = objekt_shell.Exec(boinc_prikaz);
var text_vystup = objekt_exec.StdOut.ReadAll();
var pole_vystup = new Array();
text_vystup = text_vystup + '\n' + "X) -----------" + '\n';
pole_vystup = text_vystup.split('\n');
var nazev = "";
var navrat = "";
var ano = 0;
for(var i = 0; i < pole_vystup.length; i++)
{
if (pole_vystup[i].indexOf(") -----------") != -1)
{
if (ano == 1 && navrat != 0) {
alert(abort_prikaz + " " + projekt + " " + nazev + " abort");
var abort_exec = objekt_shell.Exec(abort_prikaz + " " + projekt + " " + nazev + " abort");
}
nazev = "";
navrat = "";
ano = 0;
}
else if (pole_vystup[i].indexOf(" name: ") != -1)
{
nazev = pole_vystup[i].substr(9);
}
else if (pole_vystup[i].indexOf(" project URL: ") != -1)
{
if (pole_vystup[i].indexOf(" project URL: " + projekt) != -1)
{
ano = 1;
}
else
{
ano = 0;
}
}
else if (pole_vystup[i].indexOf(" exit_status: ") != -1)
{
navrat = pole_vystup[i].substr(16);
}
}
alert("Konec.");
V source adresáři BOINC (to je ten kde se nachází boinc.exe) vytvořit soubor boinc_abort_wus.js a do něj zkopírovat obsah výše. Podle verze BOINC zakomentovat/odkomentovat příslušné řádky. Pro verzi BOINC nižší než 6.12 budou řádky takto :
Kód: Vybrat vše
// prikaz pro zjisteni aktualnich jednotek v BOINC
var boinc_prikaz = "boinccmd.exe --get_results"; // Verze BOINC < 6.12
// var boinc_prikaz = "boinccmd.exe --get_tasks"; // Verze BOINC >= 6.12
// prikaz pro zruseni jednotky
var abort_prikaz = "boinccmd.exe --result"; // Verze BOINC < 6.12
// var abort_prikaz = "boinccmd.exe --task"; // Verze BOINC >= 6.12
Kód: Vybrat vše
// prikaz pro zjisteni aktualnich jednotek v BOINC
// var boinc_prikaz = "boinccmd.exe --get_results"; // Verze BOINC < 6.12
var boinc_prikaz = "boinccmd.exe --get_tasks"; // Verze BOINC >= 6.12
// prikaz pro zruseni jednotky
// var abort_prikaz = "boinccmd.exe --result"; // Verze BOINC < 6.12
var abort_prikaz = "boinccmd.exe --task"; // Verze BOINC >= 6.12
Tím je připravený skript ke spuštění. Je možno odzkoušet tak, že spustíte BOINC Manager, najdete tam chybně staženou WUs FreeHAL a pak poklepete na boinc_abort_wus_start.js. Jednotka by se měla označit jako zrušená.
Tento postup je pro WinXP, předpokládám že na Vista a 7 bude postup stejný.
Dále je nutné zařadit skript boinc_abort_wus_start.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. Já mám nastaveno co 20 min.
Verze pro Linux
nazval jsem to boinc_abort_wus.sh v popisu je napsáno co s tím
Kód: Vybrat vše
#!/bin/bash
# Autor : Vit Kliber, Czech National Team o.s.
#Vytvoreno : 09.01.2012
# Nazev : boinc_abort_wus.sh
# Popis : Zrusi chybne BOINC jednotky projektu FreeHAL.
# Nutno umistit do stejneho adresare kde se nachazi boinccmd a z tohoto adresare take spoustet
# Podle verze BOINC je nutne zmenit hodnoty promenych boinc_prikaz a abort_prikaz :
# zakomentovat/odkomentovat prislusne radky
# prikaz pro zjisteni aktualnich jednotek v BOINC
boinc_prikaz="./boinccmd --get_results"; # Verze BOINC < 6.12
# boinc_prikaz="./boinccmd --get_tasks"; # Verze BOINC >= 6.12
# prikaz pro zruseni jednotky
abort_prikaz="./boinccmd --result"; # Verze BOINC < 6.12
# abort_prikaz="./boinccmd --task"; # Verze BOINC >= 6.12
# adresa projektu
projekt="http://www.freehal.net/freehal_at_home/";
# 1 = Debug ON, 0 = Debug OFF
debug_code="0";
# pro zobrazeni hlaseni pri vyvoji
function zprava {
if [ "$debug_code" = "1" ]; then
echo $1;
fi
}
text_vystup=`$boinc_prikaz; echo; echo "X) -----------"; echo; `;
nazev="";
navrat="";
ano="0";
old_IFS=$IFS;
IFS=$'\n';
for i in $text_vystup
{
if [ "$i" != "${i//) -----------/}" ]; then
{
if [ "$ano" == "1" ] && [ "$navrat" != "0" ]; then
{
zprava $abort_prikaz" "$projekt" "$nazev" abort";
eval $abort_prikaz" "$projekt" "$nazev" abort";
}
fi
nazev="";
navrat="";
ano="0";
}
else if [ "$i" != "${i// name: /}" ]; then
nazev=${i:9};
else if [ "$i" != "${i// project URL: /}" ]; then
{
if [ "$i" != "${i// project URL: $projekt/}" ]; then
ano="1";
else
ano="0";
fi
}
else if [ "$i" != "${i// exit_status: /}" ]; then
navrat=${i:16};
fi
fi
fi
fi
}
IFS=$old_IFS;
zprava "KONEC";
V source adresáři BOINC (to je ten kde se nachází spustitelný soubor boinc) vytvořit soubor boinc_abort_wus.sh a do něj zkopírovat obsah výše. Podle verze BOINC zakomentovat/odkomentovat příslušné řádky. Pro verzi BOINC nižší než 6.12 budou řádky takto :
Kód: Vybrat vše
# prikaz pro zjisteni aktualnich jednotek v BOINC
boinc_prikaz="./boinccmd --get_results"; # Verze BOINC < 6.12
# boinc_prikaz="./boinccmd --get_tasks"; # Verze BOINC >= 6.12
# prikaz pro zruseni jednotky
abort_prikaz="./boinccmd --result"; # Verze BOINC < 6.12
# abort_prikaz="./boinccmd --task"; # Verze BOINC >= 6.12
Kód: Vybrat vše
# prikaz pro zjisteni aktualnich jednotek v BOINC
# boinc_prikaz="./boinccmd --get_results"; # Verze BOINC < 6.12
boinc_prikaz="./boinccmd --get_tasks"; # Verze BOINC >= 6.12
# prikaz pro zruseni jednotky
# abort_prikaz="./boinccmd --result"; # Verze BOINC < 6.12
abort_prikaz="./boinccmd --task"; # Verze BOINC >= 6.12
Tím je připravený skript ke spuštění. Je možno odzkoušet tak, že spustíte BOINC Manager, najdete tam chybně staženou WUs FreeHAL a spustíte ./boinc_abort_wus.sh. Jednotka by se měla označit jako zrušená.
Pokud má někdo jinou distribuci a bash se nenachází v /bin/bash, tak přepsat první řádek skriptu. Kde se nachází bash se zjistí příkazem whereis bash.
Pak už nezbývá než nastavit spouštění v cronu.