Lo script (non proprio perfetto nella stesura ma perfettamente funzionale...

) , installa un cronjob
del progetto del mese
Si richiede :
- il demone Cron configurato ed in esecuzione
- L'utente che esegue lo script deve aver accesso al proprio cronjob
- I comandi del client Boinc fanno riferimento ai percorsi standard utilizzati per l'installazione di Boinc
da package manager. (/usr/bin)
Riferimenti :
- Fare riferimento alla documentazione della propria distribuzione per l'uso di Cron
Script e percorsi
- Lo script deve avere una directory dedicata (a vostra scelta all'interno dello script ) ; non può essere rimossa
altirmenti la schedulazione dello script non potrà essere eseguita correttamente
- Nell'esempio la cartella sarà
/home/<vostro_utente>/script
- Il nome dello script anche quello è arbitrario (Esempio :
projmese )
Boinc
- I progetti da schedulare devono essere già collegati al Vostro client
Esecuzione :
- Creare la directory dove contenere lo script
- Con un editor di testo di Vostro gradimento creare creare lo script (Esempio : nano )
$ nano -w ~/script/projmese
- incollare il seguente codice :
#!/bin/bash
LINK () {
PS3="Selezionare il progetto del mese (N) : "
LISTA="Albert@Home
Asteroids@Home
Constellation
Cosmology
Einstein@Home
EON2
Hydrogen@Home
LeidenClassical
LHC@Home
Magnetism@Home
Milkyway@Home
Mopac@Home
Orbit@Home
QMC@Home
SETI@Home
Simone@Home
Slinca@Home
Spinhenge@Home
Test4Theory@Home
Ufluids@Home
Correlizer
DNA@Home
Docking@Home
Drugdiscovery@Home
Fightmalaria@Home
GPUGrid
LatticeProject
Malariacontrol
NRG@Home
POEM@Home
RNAWorld
Rosetta@Home
SIMAP
Superlink@Technion
ClimatePrediction.net
QuakeCatcherNetwork
Radioactive@home
VirtualPrairie
ABC@home
DistributedDataMining
Enigma@home
MooWrapper
NFS@home
NumberFields@home
OProject@home
Optima@home
PRIMABOINCA
PrimeGrid
RectilinearCrossing
SAT@home
SubsetSum@home
sudoku@vtaiwan
WEP-M+2
FreeHAL@home
MindModeling@home
Neurona@home
AlmereGrid
CAS@home
EDGeS@home
Ibercivis
RiojaScience
SZTAKIDesktopGrid
WorldCommunityGrid
Yoyo@home
BURP
Chess960@home
DistrRTgen
RenderFarm.fi
WUprop@home"
echo
select proj in $LISTA
do
echo
echo -n "Il progetto selezionato è $proj"
echo
echo
break
done
for i in $LISTA ; do
if [ "$proj" = "Albert@Home" ] ; then URL="http://albert.phys.uwm.edu/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Asteroids@Home" ] ; then URL="http://asteroidsathome.net/boinc/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Constellation" ] ; then URL="http://aerospaceresearch.net/constellation/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Cosmology" ] ; then URL="http://cosmologyathome.org/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Einstein@Home" ] ; then URL="http://einstein.phys.uwm.edu/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "EON2" ] ; then URL="http://eon.ices.utexas.edu/eon2/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Hydrogen@Home" ] ; then URL="http://hydrogenathome.org/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "LeidenClassical" ] ; then URL="http://boinc.gorlaeus.net/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "LHC@Home" ] ; then URL="http://lhcathomeclassic.cern.ch/sixtrack/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Magnetism@Home" ] ; then URL="http://www.fti.dn.ua/magnetism/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Milkyway@Home" ] ; then URL="http://milkyway.cs.rpi.edu/milkyway/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Mopac@Home" ] ; then URL="http://mopac.cadaster.eu/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Orbit@Home" ] ; then URL="http://orbit.psi.edu/oah/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "QMC@Home" ] ; then URL="http://qah.uni-muenster.de/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "SETI@Home" ] ; then URL="http://setiathome.berkeley.edu/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Simone@Home" ] ; then URL="http://mmgboinc.unimi.it/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Slinca@Home" ] ; then URL="http://dg.imp.kiev.ua/slinca/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Spinhenge@Home" ] ; then URL="http://spin.fh-bielefeld.de/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Test4Theory@Home" ] ; then URL="http://lhcathome2.cern.ch/test4theory/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Ufluids@Home" ] ; then URL="http://www.ufluids.net/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Correlizer" ] ; then URL="http://svahesrv2.bioquant.uni-heidelberg.de/correlizer/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "DNA@Home" ] ; then URL="http://dnahome.cs.rpi.edu/dna/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Docking@Home" ] ; then URL="http://docking.cis.udel.edu/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Drugdiscovery@Home" ] ; then URL="http://boinc.drugdiscoveryathome.com/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Fightmalaria@Home" ] ;then URL="http://boinc.ucd.ie/fmah/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "GPUGrid" ] ; then URL="http://www.gpugrid.net/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "LatticeProject" ] ; then URL="http://boinc.umiacs.umd.edu/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Malariacontrol" ] ; then URL="http://www.malariacontrol.net/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "NRG@Home" ] ; then URL="http://boinc.med.usherbrooke.ca/nrg/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "POEM@Home" ] ; then URL="http://boinc.fzk.de/poem/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "RNAWorld" ] ; then URL="http://www.rnaworld.de/rnaworld/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Rosetta@Home" ] ; then URL="http://boinc.bakerlab.org/rosetta/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "SIMAP" ] ; then URL="http://boincsimap.org/boincsimap" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Superlink@Technion" ] ; then URL="http://cbl-boinc-server2.cs.technion.ac.il/superlinkattechnion/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "ClimatePrediction.net" ] ;then URL="http://climateprediction.net/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "QuakeCatcherNetwork" ] ; then URL="http://qcn.stanford.edu/sensor/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Radioactive@home" ] ; then URL="http://radioactiveathome.org/boinc/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "VirtualPrairie" ] ; then URL="http://vcsc.cs.uh.edu/virtual-prairie/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "ABC@home" ] ; then URL="http://abcathome.com/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "CollatzConjecture" ] ; then URL="http://boinc.thesonntags.com/collatz/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "DistributedDataMining" ] ;then URL="http://www.distributeddatamining.org/distributeddatamining/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Enigma@home" ] ; then URL="http://www.enigmaathome.net/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "MooWrapper" ] ; then URL="http://boincsimap.org/boincsimap/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "NFS@home" ] ; then URL="http://escatter11.fullerton.edu/nfs/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "NumberFields@home" ] ;then URL="http://numberfields.asu.edu/NumberFields/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "OProject@home" ] ; then URL="http://oproject.info/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "PRIMABOINCA" ] ; then URL="http://www.primaboinca.com/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "PrimeGrid" ] ; then URL="http://www.primegrid.com/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "RectilinearCrossing" ] ;then URL="http://dist.ist.tugraz.at/cape5/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "SAT@home" ] ; then URL="http://sat.isa.ru/pdsat/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "SubsetSum@home" ] ; then URL="http://sat.isa.ru/pdsat/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "sudoku@vtaiwan" ] ; then URL="http://sudoku.nctu.edu.tw/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "WEP-M+2" ] ; then URL="http://bearnol.is-a-geek.com/wanless2/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "FreeHAL@home" ] ; then URL="http://freehal.net/freehal_at_home/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "MindModeling@home" ] ;then URL="http://mindmodeling.org/beta/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Neurona@home" ] ; then URL="http://falua.cesfelipesegundo.com/Neurona/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "AlmereGrid" ] ; then URL="http://boinc.almeregrid.nl/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "CAS@home" ] ; then URL="http://casathome.ihep.ac.cn/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "EDGeS@home-" ] ; then URL="http://home.edges-grid.eu/home/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Ibercivis" ] ; then URL="http://www.ibercivis.es/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "RiojaScience" ] ; then URL="http://boinc.riojascience.com/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "SZTAKIDesktopGrid" ] ;then URL="http://szdg.lpds.sztaki.hu/szdg/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "WorldCommunityGrid" ] ; then URL="http://www.worldcommunitygrid.org/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Yoyo@home" ] ; then URL="http://www.rechenkraft.net/yoyo/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "BURP" ] ; then URL="http://burp.renderfarming.net/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "Chess960@home" ] ; then URL="http://www.chess960athome.org/alpha/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "DistrRTgen" ] ; then URL="http://boinc.freerainbowtables.com/distrrtgen/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "RenderFarm.fi" ] ; then URL="http://renderfarm.fi/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
elif [ "$proj" = "WUprop@home" ] ; then URL="http://wuprop.boinc-af.org/" ; echo "L'ATTACH del progetto selezionato è $URL" ; break
else break
fi
done
return
}
LOGIN () {
ACCOUNT=""
PASSWD=""
KEY1=$(boinccmd --lookup_account $URL "$ACCOUNT" $PASSWD)
KEY=${KEY1##*key:}
OPTS_CMD="--host localhost --project_attach $URL $KEY"
echo
echo -n "Collegare il progetto ? (S/N) " ; read risp
case $risp in
S|s|si|SI|Si|sI)
MASTERURL_=$(boinccmd --get_state | grep "project URL:")
MASTERURL=${MASTERURL_##*project URL:}
if [ $MASTERURL = $URL ] ; then
echo "Progetto già collegato" ; sleep 5 ; return
else
boinccmd $OPTS_CMD
echo
echo "Account_key : $KEY"
echo "Progetto $proj collegato"
sleep 5
fi
;;
N|n|no|NO|nO|No)
return
;;
*)
LOGIN
;;
esac
return
}
while true ; do # Inizio Loop dello script
DIR_CRON="/home/<user>/script/job/"
FILE_CRON="progettomese.cron"
if [ -d $DIR_CRON ] ; then clear
else mkdir $DIR_CRON
fi
FULL="$DIR_CRON""$FILE_CRON"
crontab -l > $FULL
crontab -l > "$DIR_CRON"cron.bak
clear
echo "1 - Abilitare il progetto del mese"
echo "2 - Disabilitare il progetto del mese"
echo "3 - Esci"
echo
echo -n "Selezione : " ; read RISP
case $RISP in
1)
clear
LINK
echo
echo -n "Progetto del mese di [1-12] > "; read MESE
LOGIN
case $MESE in
1|2|3|4|5|6|7|8|9|10|11|12)
CMESE=$(($MESE+1))
if [ $CMESE -gt 12 ] ; then CMESE=1 ; fi
sed -i -e '1,3d' $FULL
sed -i.bak -e '/# INIZIO PROGETTO DEL MESE BOINC/,/# FINE PROGETTO DEL MESE BOINC/d' $FULL
echo "# INIZIO PROGETTO DEL MESE BOINC" >> $FULL
echo "# FINE PROGETTO DEL MESE BOINC" >> $FULL
sed -i.bak -e '/# INIZIO PROGETTO DEL MESE BOINC/a#' $FULL
sed -i.bak -e '/# FINE PROGETTO DEL MESE BOINC/i#' $FULL
sed -i.bak -e '/# INIZIO PROGETTO DEL MESE BOINC/a*'"/5"' * * '"$MESE"' * boinccmd --project '"$URL"' allowmorework ; boinccmd --project '"$URL"' resume ; boinccmd --project '"$URL"' update ' $FULL
sed -i.bak -e '/# FINE PROGETTO DEL MESE BOINC/i*'"/5"' * * '"$CMESE"' * boinccmd --project '"$URL"' nomorework' $FULL
clear
echo "Prossimo progetto del mese ( $proj ) aggiunto al crontab utente"
echo ; echo
sleep 2
crontab $FULL
crontab -l
exit 0
;;
esac
;;
2)
sed -i -e '1,3d' $FULL
sed -i -e '/# INIZIO PROGETTO DEL MESE BOINC/,/# FINE PROGETTO DEL MESE BOINC/d' $FULL
echo
echo "Progetto del mese rimosso dal crontab utente."
echo ; echo
sleep 2
crontab $FULL
crontab -l
exit 0
;;
3)
exit 0
;;
esac
done
- Salvare e rendere lo script eseguibile
$ chmod +x ~/script/projmese
- Eseguire lo script
Lo script
DIR_CRON="/home/<user>/script/job/" <user> --> Indicare il Vostro utente
FILE_CRON="progettomese.cron"
> Indicare il nome del file da schedulare
sed -i -e '1,3d' $FULL --> Cancella le prime 3 righe del cronjob utente.Dipende dalla distribuzione in uso
Visualizzando i cronjob utente con "crontab -l" , generalmente le prime righe stampano un log degli interventi al cronjob ,ad ogni modifica se ne aggiunge uno , questo evita un elenco troppo lungo . controllare quante righe vengono aggiunte e se necessario modificare il valore in '1,
3d' di sed