Ethminerctl
Материал из Linux Wiki
Версия от 19:59, 13 марта 2016; Rain (обсуждение | вклад) (Новая страница: «{{ToDo|Написать}} <source lang=bash> #!/bin/bash [ -z "${lowpower}" ] && lowpower='165' [ -z "${highpower}" ] && highpower='175' [ -z "${URL}" ] && URL=…»)
ToDo: Написать
#!/bin/bash
[ -z "${lowpower}" ] && lowpower='165'
[ -z "${highpower}" ] && highpower='175'
[ -z "${URL}" ] && URL="http://ethproxy.linuxoid.in:8880/$(hostname)"
ethpath='/home/rain/ethminer'
screensession="$(screen -ls | awk '/mainscreen/{print $1}')"
ownbin='/home/rain/bin'
cl='10000'
upsc='mustek600@192.168.222.254'
sayto() {
(cat - ; echo -n " on $(hostname)") | sendxmpp -t rain@jabberworld.info
}
showdate() {
echo -ne "\e[0;36m[\e[0;35m"$(date +%Y-%m-%d" "%H:%M:%S)"\e[0;36m]\e[0;0m "
}
case "${1}" in
start)
showdate
echo 'Starting ethminer'
echo -e '\n\n===== miner restart =====\n\n' >> /tmp/ethlog
${ownbin}/monit.sh lock
pkill monit.sh
pkill sgminer
while pidof sgminer 1>/dev/null
do
sleep 0.1
done
for i in $(seq 1 $(grep -c fglrx /etc/X11/xorg.conf))
do
DISPLAY=:0.$(($i-1)) aticonfig --pplib-cmd "set fanspeed 0 100" 1>/dev/null
done
screen -S "${screensession}" -X setenv ETHFLAGS "${ETHFLAGS}"
screen -S "${screensession}" -X setenv URL "${URL}"
screen -S "${screensession}" -X setenv lowpower "${lowpower}"
screen -S "${screensession}" -X setenv highpower "${highpower}"
screen -S "${screensession}" -X screen -t ethminer bash -c "$0 main"
;;
stop)
showdate
echo 'Stopping ethminer'
kill $(pidof ethminer)
;;
service)
find /home/rain/.ethash/ -maxdepth 1 -type f |
while read i
do
lsof -n /home/rain/.ethash/ | grep -q "$(basename "$i")" || rm -f "${i}"
done
mostmem="$(timeout 10 clinfo | awk '
BEGIN {
n=0
}
/CL_DEVICE_TYPE_GPU/{
g=1
}
/CL_DEVICE_TYPE_CPU/{
g=0
}
/Max memory/{
if (g==1) {
print $4" "n
n+=1
}
}' | sort -nr | awk '{
if (NF == 2 && NR == 1) print "--device "$2
}'
)"
screen -S "${screensession}" -X screen -t sgminer /bin/bash -c "/home/rain/currentminer/sgminer --config=/home/rain/config/pools.conf --lowmem -g 1 $mostmem"
while ! nc -w 1 -z localhost 4028
do
sleep 0.1
done
$ownbin/gpuoff 1>/dev/null
sync &
;;
lock)
touch /tmp/ethlock
;;
unlock)
rm -f /tmp/ethlock 2>/dev/null
;;
main)
LD_LIBRARY_PATH=${ethpath} ${ethpath}/ethminer --cl-local-work 256 ${ETHFLAGS} -G -v 9 -F ${URL} --disable-submit-hashrate 2>&1 |
tee -a /tmp/ethlog | gawk '
BEGIN {
fail=0
sol=0
rej=0
s=0
}
/Bailing/{
system("pkill -x ethminer ; '$0' notify Memory problem")
}
/FAILURE/{
fail+=1
rej=fail*100/sol
}
/Solution found/{
CONVFMT="%.2f"
sol+=1
rej=fail*100/sol
if (started!=1) {
system("'$0' service &")
started=1
}
shares[s]=systime()
s+=1
}
/gpuminer0.*workLoop 1/{
if (started!=1) {
n+=1
if (n>2) {
system("'$0' service &")
started=1
}
}
}
/Initialising miner/{
if (started==1) system("pkill -x ethminer ; '$0' notify New epoch restart")
}
{
OFMT="%.2f"
cnt=0
sum=0
for (l in shares) {
if (shares[l]>(systime()-1800)) cnt+=1
else shares[l]=""
}
printf "%-7s %-7s %-10s %s\n", "A:"sol, "R:"rej"%", "W:"cnt/30" s/m", "|"$0
nl+=1
if (nl>10) nl=0
if ($0 ~ /JSON/) arr[nl]=1
else arr[nl]=0
for (i in arr) sum+=arr[i]
if (sum*100/length(arr)>'50') {
system("pkill -x ethminer ; '$0' notify Connection problem")
sum=0
}
fflush()
}
'
date # process finish date
while [ "${cl}" != '0' ]
do
echo -ne "\rThis window will be automatically closed at ${cl} seconds (or press Enter) "
let cl-=1
read -t 1 && break
done
;;
notify)
shift
echo -n "$@" | sayto
;;
suspend)
showdate
echo 'Suspending ethminer'
pkill -SIGSTOP -x ethminer
;;
unsuspend)
showdate
echo 'Unsuspending ethminer'
pkill -SIGCONT -x ethminer
;;
monit)
while :;
do
[ -e '/tmp/ethlock' ] && { echo 'Script is locked' ; } || {
[ "0$(du /tmp/ethlog 2>/dev/null | awk '{print $1}')" -gt '10240' ] && {
sed '1,20000d' /tmp/ethlog > /tmp/ethlog.tmp && cat /tmp/ethlog.tmp > /tmp/ethlog
rm -f /tmp/ethlog.tmp 2>/dev/null
}
pgrep -x ethminer 1>/dev/null || $0 start &
tempalert="$(aticonfig --odgt --adapter=all | awk '/Temp/{n+=1 ; OFMT="%.f" ; t=$5+0 ; if (t>85) print n": "$0}')"
[ ! -z "${tempalert}" ] && { echo -n "${tempalert}" | sayto ; $0 suspend ; }
}
sleep 10
done
;;
power)
while :
do
data="$(upsc ${upsc} | awk '/input.voltage:/{OFMT="%.f" ; print $2+0}')"
[ ! -z "${data}" ] && {
[ "${data}" -le "${lowpower}" ] && {
[ ! -e '/tmp/lowpower' ] && {
showdate
echo "Low power: ${data}"
touch '/tmp/lowpower'
$0 suspend
$0 lock
}
}
[ "${data}" -gt "${highpower}" ] && {
[ -e '/tmp/lowpower' ] && {
showdate
echo "High power: ${data}"
$0 unlock
$0 unsuspend
rm -f '/tmp/lowpower' 2>/dev/null
}
}
}
sleep 10
done
;;
restart)
$0 lock
$0 stop
sleep 3
$0 start
$0 unlock
;;
*)
echo 'Tell me something...'
;;
esac