This repository has been archived by the owner on Aug 18, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
resume_calc
executable file
·126 lines (118 loc) · 3.42 KB
/
resume_calc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/bash
#Création le 08/05/2015 -- https://github.com/Maeda1/boinc
#But : reprend les UT d'un projet au choix qui sont en attente pour les finir
#A CHANGER : dossier de travail de Boinc
boincdos="/media/Calculs/boinc"
#initialisation
ok=0
count_arg=1
#Recherche d'un argument précisant déjà l'URL du projet, si trouvé = pas de question posée
for arg in "$@"
do
if [ "$(echo $arg | grep "^http")" ];then
url_prj="$arg"
elif [ "$(echo `date -d "$arg" 2> /dev/null`)" ];then
hms="$arg"
elif [ "$arg" -gt 1 -a "$arg" -le 32768 ];then
testpid="OK"
killsusp="$arg"
fi
let "count_arg++"
if [ $count_arg -gt 3 ];then
break
fi
done
#Vérification si on peut bypasser les questions grâce aux arguments
echo "URL projet = $url_prj"
echo "Date de reprise = $hms"
echo "PID à tuer = $killsusp"
if [ ! -z "$hms" -a ! -z "$url_prj" ];then
ok="OK"
echo "$ok"
fi
if [ -z "$killsusp" ];then
echo "-> Pas de PID, on ne tuera pas de suspend_calc !"
else
testpid="$(pgrep suspend_ | grep -Fx $killsusp)"
if [ -z "$testpid" ];then
echo "PID non trouvé : mauvaise saisie, vérifier le PID passé en argument."
exit 1
fi
fi
#Choix projet
while [ "$ok" != "OK" ]
do
echo "> Choix du projet cible <"
boinccmd --get_project_status | grep -A 1 "\-----------" | more
echo "> Entrer le choix voulu par le nombre correspondant < (0=quitter)"
read chx_prj
if [ $chx_prj = 0 ];then
exit
fi
if [ "$(boinccmd --get_project_status | grep -A 1 "^$chx_prj) ")" = "" ];then
echo "Erreur de saisie, ce choix n'existe pas"
sleep 2
else
echo "> Heure exacte à laquelle reprendre les calculs [taper ENTREE pour action immédiate] < /!\ format = mm/jj/aaaa hh:mm"
read hms
echo "============="
echo "Votre choix :"
echo " $(boinccmd --get_project_status | grep -A 1 "^$chx_prj) ")"
echo "-> REPRISE des calculs = $hms"
echo "============="
url_prj="$(boinccmd --get_project_status | grep -A 2 "^$chx_prj) " | grep URL | cut -d " " -f6)"
echo "Est-ce OK ? (taper OK)"
read ok
if [ "$(ps -eo pid,comm | grep suspend_calc)" ];then
echo "== Script suspend_calc détecté =="
echo "$(ps -h| grep "[s]uspend_")"
echo "Entrer le nombre correspondant pour tuer le processus à l'heure définie : (taper ENTREE pour ne rien tuer et continuer)"
read killsusp
if [ ! -z $killsusp ];then
testpid="$(pgrep suspend_ | grep -Fx $killsusp)"
if [ -z "$testpid" ];then
echo "Problème avec le PID : mauvaise saisie, on repart du début"
ok="NOK"
unset killsusp
sleep 3
else
echo "PID vérifié et OK"
fi
fi
fi
fi
done
#Attente avant Heure H
if [ ! -z "$hms" ];then
debut=$(date +%s)
fin=$(date -d "$hms" +%s)
attente=$(($fin-$debut))
echo "`date` => Attente de : $attente secondes"
sleep $attente
fi
#Traitements
if [ ! -z "$testpid" ];then
echo "On tue le suspend_calc demandé"
kill $killsusp
sleep 3
if [ "$(ps -eo pid,comm | grep $killsusp)" ];then
kill -9 $killsusp
sleep 3
fi
if [ "$(ps -eo pid,comm | grep $killsusp)" ];then
echo "! Problème pour tuer le suspend_calc !"
exit 1
fi
fi
echo "Reprise des calculs..."
#Sélection des UT suspendues
boinccmd --get_tasks | grep -B 12 -A 8 "suspended via GUI: yes" | grep -B 2 "$url_prj" | grep '^[[:blank:]]*name:' | cut -d " " -f5 > /tmp/tasklist
#Reprise des calculs
while read ligne
do
echo "[`date "+%d%m%y %H:%M:%S"`] Reprise de : $ligne"
cd $boincdos
boinccmd --task "$url_prj" $ligne resume
done < "/tmp/tasklist"
echo "Fin script"
exit 0