Jump to content

Тотальный контроль ферм - Linux.


Recommended Posts

Posted

Ищу софт для контролинга большого кол-ва ферм.

Под никс.

 

Семейство дебиан.

 

Авторебут .

Масс смена пулов.

 

И другие решения для упрощения жизни.

Posted

это пул manager для бампа для одной машины , а нужно что бы контроль всех ферм был в одной панели с массовой сменой пулов сразу на всех или на выбранных

Posted (edited)

Хотел тоже такой контроль, так как 3 фермы в работе. Пока набросал небольшой рабочий скрипт без проверок.

 

-Запускается на локальном PC, на майнеры ничего грузить не нужно.

-Необходимо настроить беспарольную ssh авторизацию

-Пока на 2 майнера, можно сделать больше

-Показывает статистику всех майнеров,

-Правит конфиг всех майнеров сразу или по выбору

 

Если что-то типо такого вам нужно, могу еще что-то добавить. Проверил на Linux BAMT 1.3. 

p.s. На счет авторебута не понял, по какому условию должен срабатывать ?

#!/bin/sh
# author: demontager
#

MINER1="192.168.1.104"
MINER2="192.168.1.101"
MINER3=""
#########################POOL CONFIG####################################
pool() {
    
echo '
{
"pools" : [
            {
                "url" : "stratum+tcp://server:3333",
                "user" : "User",
                "pass" : "pass"
            }
],
"api-listen" : true,
"intensity" : "20,20,20",
"vectors" : "1",
"worksize" : "256",
"kernel" : "scrypt",
"auto-fan" : true,
"temp-cutoff" : "85",
"temp-overheat" : "80",
"temp-target" : "70",
"expiry" : "10",
"gpu-dyninterval" : "7",
"log" : "5",
"queue" : "0",
"retry-pause" : "5",
"scan-time" : "5",
"scrypt" : true,
"temp-hysteresis" : "3",
"shares" : "0",
"shaders" : "1792",
"thread-concurrency" : "16000",
"gpu-thread" : "1",
"gpu-engine" : "1075,1075,1075",
"sharethreads" : "32",
"lookup-gap" : "2",
"gpu-powertune" : "20",
"gpu-memclock" : "1250,1250,1250"

}'| ssh root@$HOST 'cat > /etc/bamt/cgminer.conf'

}
#############################END########################################

config() {
echo -n "1. Specify miner: [1/2/3] (default:all) "
read miner
if [ "$miner" = '1' ] || [ "$miner" = '2' ] || [ "$miner" = '3' ]; then
  if [ "$miner" = '1' ]; then
    HOST="$MINER1"
    pool
    #scp $CONF root@$MINER1:/etc/bamt/cgminer.conf.test
    ssh root@"$MINER1" -p 22 'mine restart'
  elif [ "$miner" = '2' ]; then
    HOST="$MINER2"
    pool
    ssh root@"$MINER2" -p 22 'mine restart'
  fi
elif [ "$miner" = 'all' ] || [ "$miner" = '' ]; then
    HOST="$MINER1"
    pool
    ssh root@"$MINER1" -p 22 'mine restart'
    unset HOST
    HOST="$MINER2"
    pool
    ssh root@"$MINER2" -p 22 'mine restart'    
fi
}

status() {
echo ""
echo "-----------------MINER IP:$MINER1--------------------------------"    
ssh root@192.168.1.104 -p 22 '/opt/bamt/viewgpu'     
echo "-----------------MINER IP:$MINER2--------------------------------"
ssh root@"$MINER2" -p 22 '/opt/bamt/viewgpu'
echo ""
}

viewpool() {
echo -n "1. Specify miner: [1/2/3] "
read miner
if [ "$miner" = '1' ] || [ "$miner" = '2' ] || [ "$miner" = '3' ]; then
  if [ "$miner" = '1' ]; then
    ssh root@"$MINER1" -p 22 'cat /etc/bamt/cgminer.conf'    
  elif [ "$miner" = '2' ]; then
    ssh root@"$MINER2" -p 22 'cat /etc/bamt/cgminer.conf'
  fi
fi         
}

case "$1" in
        config)
                config
                ;;
        viewpool)
                viewpool                                                  
                ;;
         status)
                status
                 ;;       
           *)
                echo "Usage: `basename $0` (config|status|viewpool)"
                exit 1
                ;;
esac
Edited by Demontager
Posted

Вот инетресный скрипт для колребута при отвале карт

 

#!/bin/bash

#Set your targeted minimum temp here, system will issue a cold
#reboot if a card temp falls below this number
targetMinTemp=50
i=0
(/opt/bamt/viewgpu | awk '{ print $2; }' | cut -c -2 > /tmp/viewgpu) & pid=$!
echo $pid
(sleep 10 && kill $pid)
sleep 15
array=(`cat /tmp/viewgpu`)
if [ ${#array[@]} -eq 0 ]; then
  echo "`date +%m-%d-%Y` `uptime | awk -F, '{sub(".*ge ",x,$1);print $1}'` viewgpu command failed to run, rebooting" >>  /home/$(grep '1000' /etc/passwd | cut -d ':' -f 1)/autoRebooter.log
  /sbin/coldreboot &
  sleep 30
  echo s > /proc/sysrq-trigger
  sleep 10
  echo b > /proc/sysrq-trigger
fi
for temp in ${array[@]}; do
  if [ $temp -lt $targetMinTemp ]; then
    echo "`date +%m-%d-%Y` `uptime | awk -F, '{sub(".*ge ",x,$1);print $1}'` card number $i has stopped, its current temp is $temp, coldrebooting" >> /home/$(grep '1000' /etc/passwd | cut -d ':' -f 1)/autoRebooter.log
    /sbin/coldreboot &
    sleep 30
    echo s > /proc/sysrq-trigger
    sleep 10
    echo b > /proc/sysrq-trigger
  fi
i=$(($i+1))
done

Posted

Я уже видел этот скрипт. Его имеет смысл прописать в cron на майнере и при обнаружении отваливания видеокарт от майнинга, он будет делать ребут. 

Я могу добавить часть этого кода в свой скрипт. Тогда будет срабатывать ребут таким образом - запускается скрипт, проверяются параметры видеокарт на всех майнерах и если обнаруживается что где-то отвалился майнер, выдаст сообщение/сделает ребут. Тогда можно сделать чтобы cron запускался и на одном, к примеру локальном PC.

Posted

Может вообще допилим анубис или что то подобное и получим полноценную систему управления тотального контроля ферм ?

 

Есть желание ?

Posted

Может вообще допилим анубис или что то подобное и получим полноценную систему управления тотального контроля ферм ?

 

Есть желание ?

Анубис вроде не совсем то, что требуется. да и с безопасностью там беда.

Posted (edited)

Держите мой скрипт, может пригодится: http://rghost.ru/52931809 (общий размер около 5 килобайт) - писал на ruby. Умеет смотреть статистику ферм, создавать новый файл pools.conf из шаблона и загружать его через rsync. В планах добавить проверку на sick/dead и сделать авторебут.

 

Требования:

1. должен стоять ruby, так же гемы colorize и erubis. На фермах должен быть разрешен доступ к cgminer api. Cgminer так же должен брать файл по адресу /etc/bamt/autopools.conf (можно изменить в файте upload.sh), это делается такой строчкой:

 

"include" : "/etc/bamt/autopools.conf"

 

2. Нужно предварительно отредактировать файлы cgminer.rb и upload.sh, прописать айпи ферм и пулы. На сервере должен быть настроен вход по ssh без пароля (гуглить по фразе ssh-copy-id)

3. Запуск через консоль: ruby cgminer.rb conf

 

Писалось для себя, лично мне пользоваться этим очень удобно, один раз прописать айпишники ферм и потом одной командой можно постоянно изменить адрес пулов.

 

Кому нужна инфа из первых рук - приглашаю вас в конфу в скайпе, пишите в лс - добавлю.

Edited by FancyDancy
Posted (edited)

Я в ruby не селен, допиливаю то, что понимаю, мне так легче. Но все равно спасибо за труд!
 
Нужна помощь кто знает bash. Суть задачи такая - нужно чтобы на удаленном хосте менялся только конфиг серверов, а настройки видеокарт оставались прежними. Таким образом в скрипте будут только указываются настройки серверов stratum. Я пока думаю как это реализовать, может есть у кого какие мысли.
 
Вторая ревизия скрипта
Изменения:
- Добавил код авторебута, теперь можно прописать выполнение скрипта в cron  и все майнеры будут проверятся на предмет отваливания от майнинга
- Добавил 3 майнера + можно задать ssh порт каждого отдельно

 

#!/bin/bash
# author: demontager
#

MINER1="192.168.1.104"
PORT1="22"
##
MINER2="192.168.1.101"
PORT2="22"
##
MINER3="192.168.1.105"
PORT3="222"
#########################POOL CONFIG####################################
pool() {
echo '{
"pools" : [
        {
                "url" : "stratum+tcp://server:3333",
                "user" : "User",
                "pass" : "x"
        },
    
        {
                "url" : "stratum+tcp://server:3333",
                "user" : "User",
                "pass" : "x"

        }
]
,
"auto-fan" : true,
"auto-gpu" : true,
"temp-cutoff" : "84",
"temp-overheat" : "81",
"temp-target" : "69",
"temp-hysteresis" : "2",
"gpu-fan" : "20-100",
"intensity" : "20",
"worksize" : "256",
"lookup-gap" : "2",
"thread-concurrency" : "24000",
"api-port" : "4028",
"expiry" : "30",
"gpu-platform" : "0",
"gpu-threads" : "1",
"gpu-engine" : "1075",
"gpu-memclock" : "1250",
"gpu-powertune" : "20",
"log" : "5",
"no-pool-disable" : true,
"no-submit-stale" : true,
"queue" : "1",
"scan-time" : "30",
"scrypt" : true,
"shares" : "0",
"kernel-path" : "/usr/local/bin"
}'| ssh root@$HOST -p $PORT 'cat > /etc/bamt/cgminer.conf'
}
#############################END########################################

config() {
echo -n "1. Specify miner: [1/2/3] (default:all) "
read miner
if [ "$miner" = '1' ] || [ "$miner" = '2' ] || [ "$miner" = '3' ]; then
  if [ "$miner" = '1' ]; then
    HOST="$MINER1"
    PORT="$PORT1"
    pool
    ssh root@"$MINER1" -p "$PORT1" 'mine restart'
  elif [ "$miner" = '2' ]; then
    HOST="$MINER2"
    PORT="$PORT2"
    pool
    ssh root@"$MINER2" -p "$PORT2" 'mine restart'
  elif [ "$miner" = '3' ]; then
    HOST="$MINER3"
    PORT="$PORT3"
    pool
    ssh root@"$MINER3" -p "$PORT3" 'mine restart'
  fi
elif [ "$miner" = 'all' ] || [ "$miner" = '' ]; then
    HOST="$MINER1"
    PORT="$PORT1"
    pool
    ssh root@"$MINER1" -p "$PORT1" 'mine restart'
    unset HOST
    unset PORT
    HOST="$MINER2"
    PORT="$PORT2"
    pool
    ssh root@"$MINER2" -p "$PORT2" 'mine restart'
    unset HOST
    unset PORT
    HOST="$MINER3"
    PORT="$PORT3"
    pool
    ssh root@"$MINER3" -p "$PORT3" 'mine restart'    
fi
}

status() {
echo ""
echo "-----------------MINER IP:$MINER1"	
ssh root@"$MINER1" -p "$PORT1" '/opt/bamt/viewgpu'
echo "" 	
echo "-----------------MINER IP:$MINER2"
ssh root@"$MINER2" -p "$PORT2" '/opt/bamt/viewgpu'
echo ""
echo "-----------------MINER IP:$MINER3"
ssh root@"$MINER3" -p "$PORT3" '/opt/bamt/viewgpu'
echo ""
}




cron() {
cat <<'EOF' | ssh root@$HOST -p $PORT 'cat - > /etc/bamt/cardcheck.sh && chmod +x /etc/bamt/cardcheck.sh && /etc/bamt/cardcheck.sh'
targetMinTemp=50
i=0
(/opt/bamt/viewgpu | awk '{ print $2; }' | cut -c -2 > /tmp/viewgpu)
sleep 5
array=(`cat /tmp/viewgpu`)
if [ ${#array[@]} -eq 0 ]; then
  echo "`date +%m-%d-%Y` `uptime | awk -F, '{sub(".*ge ",x,$1);print $1}'` viewgpu command failed to run, rebooting" >>  /etc/bamt/autoRebooter.log
  /sbin/coldreboot &
  sleep 30
  echo s > /proc/sysrq-trigger
  sleep 10
  echo b > /proc/sysrq-trigger
elif [ ${#array[@]} -ne 0 ]; then
   INTERFACE=`cat /proc/net/arp | grep -m 1 -v Device | awk '{print $6}'`
   echo "----------------MINER IP:`/sbin/ifconfig $INTERFACE | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1 | tr -d '[:blank:]'`"
   echo "`/opt/bamt/viewgpu`"
   echo ""
fi
for temp in ${array[@]}; do
  if [ $temp -lt $targetMinTemp ]; then
    echo "`date +%m-%d-%Y` `uptime | awk -F, '{sub(".*ge ",x,$1);print $1}'` card number $i has stopped, its current temp is $temp, coldrebooting" >> /etc/bamt/autoRebooter.log
    /sbin/coldreboot &
    sleep 30
    echo s > /proc/sysrq-trigger
    sleep 10
    echo b > /proc/sysrq-trigger
  fi
i=$(($i+1))
done
EOF

}

cronhost() {
HOST="$MINER1"
PORT="$PORT1"
cron
unset PORT
unset HOST
HOST="$MINER2"
PORT="$PORT2"
cron
unset HOST
unset PORT
HOST="$MINER3"
PORT="$PORT3"
cron	
}

viewpool() {
echo -n "1. Specify miner: [1/2/3] "
read miner
if [ "$miner" = '1' ] || [ "$miner" = '2' ] || [ "$miner" = '3' ]; then
  if [ "$miner" = '1' ]; then
    ssh root@"$MINER1" -p "$PORT1" 'cat /etc/bamt/cgminer.conf'	
  elif [ "$miner" = '2' ]; then
    ssh root@"$MINER2" -p "$PORT2" 'cat /etc/bamt/cgminer.conf'
  elif [ "$miner" = '3' ]; then
    ssh root@"$MINER3" -p "$PORT3" 'cat /etc/bamt/cgminer.conf'
  fi
fi     	
}

case "$1" in
        config)
                config
                ;;
        viewpool)
                viewpool                                                  
                ;;
         status)
                status
                 ;;       
           cron)
                 cronhost
                 ;;
           *)
                echo "Usage: `basename $0` (config|status|viewpool|cron)"
                exit 1
                ;;
esac

 

 

Edited by Demontager
Posted

Нужна помощь кто знает bash. Суть задачи такая - нужно чтобы на удаленном хосте менялся только конфиг серверов, а настройки видеокарт оставались прежними. Таким образом в скрипте будут только указываются настройки серверов stratum. Я пока думаю как это реализовать, может есть у кого какие мысли.

 

Ну я же писал. В cgminer.conf убрать список пулов и добавить строчку:

"include" : "/etc/bamt/autopools.conf"

 

Адрес и название изменить по надобности. Теперь этот файл можно менять как угодно, сгмайнер будет брать список пулов именно из него, а основной cgminer.conf будет нетронутым.

Posted (edited)

Да, можно и так, но хочется еще как я написал. Хотя можно и в сам скрипт прописать чтобы автоматически менял cgminer.conf по схеме с include.

 

Сделал как хотел, править cgminer.conf не нужно.

 

Изменения:

- В скрипте задаются только сервера для майнинга

- Добавил описание опций

 

 

#!/bin/bash
# author: demontager
#

MINER1="192.168.1.104"
PORT1="22"
##
MINER2="192.168.1.101"
PORT2="22"
##
MINER3="192.168.1.105"
PORT3="222"
#########################POOL CONFIG####################################
pool() {
cat <<'EOF' | ssh root@$HOST -p $PORT 'cat - > /tmp/pool.tmp && sed -n "/]/{:a;n;/}/b;p;ba}" /etc/bamt/cgminer.conf > /tmp/cgminer.conf.tmp \
&& cat /tmp/pool.tmp /tmp/cgminer.conf.tmp > /etc/bamt/cgminer.conf && echo "}" >> /etc/bamt/cgminer.conf \
&& rm /tmp/pool.tmp /tmp/cgminer.conf.tmp'
{
"pools" : [
{
"url" : "stratum+tcp://server:3333",
"user" : "User",
"pass" : "x"
},

{
"url" : "stratum+tcp://server1:3333",
"user" : "User",
"pass" : "x"

}
]
EOF
}
#############################END########################################

config() {
echo -n "1. Specify miner: [1/2/3] (default:all) "
read miner
if [ "$miner" = '1' ] || [ "$miner" = '2' ] || [ "$miner" = '3' ]; then
if [ "$miner" = '1' ]; then
HOST="$MINER1"
PORT="$PORT1"
pool
ssh root@"$MINER1" -p "$PORT1" 'mine restart'
elif [ "$miner" = '2' ]; then
HOST="$MINER2"
PORT="$PORT2"
pool
ssh root@"$MINER2" -p "$PORT2" 'mine restart'
elif [ "$miner" = '3' ]; then
HOST="$MINER3"
PORT="$PORT3"
pool
ssh root@"$MINER3" -p "$PORT3" 'mine restart'
fi
elif [ "$miner" = 'all' ] || [ "$miner" = '' ]; then
HOST="$MINER1"
PORT="$PORT1"
pool
ssh root@"$MINER1" -p "$PORT1" 'mine restart'
unset HOST
unset PORT
HOST="$MINER2"
PORT="$PORT2"
pool
ssh root@"$MINER2" -p "$PORT2" 'mine restart'
unset HOST
unset PORT
HOST="$MINER3"
PORT="$PORT3"
pool
ssh root@"$MINER3" -p "$PORT3" 'mine restart'
fi
}

status() {
echo ""
echo "-----------------MINER IP:$MINER1"
ssh root@"$MINER1" -p "$PORT1" '/opt/bamt/viewgpu'
echo ""
echo "-----------------MINER IP:$MINER2"
ssh root@"$MINER2" -p "$PORT2" '/opt/bamt/viewgpu'
echo ""
echo "-----------------MINER IP:$MINER3"
ssh root@"$MINER3" -p "$PORT3" '/opt/bamt/viewgpu'
echo ""
}




cron() {
cat <<'EOF' | ssh root@$HOST -p $PORT 'cat - > /etc/bamt/cardcheck.sh && chmod +x /etc/bamt/cardcheck.sh && /etc/bamt/cardcheck.sh'
targetMinTemp=50
i=0
(/opt/bamt/viewgpu | awk '{ print $2; }' | cut -c -2 > /tmp/viewgpu)
sleep 5
array=(`cat /tmp/viewgpu`)
if [ ${#array[@]} -eq 0 ]; then
echo "`date +%m-%d-%Y` `uptime | awk -F, '{sub(".*ge ",x,$1);print $1}'` viewgpu command failed to run, rebooting" >> /etc/bamt/autoRebooter.log
/sbin/coldreboot &
sleep 30
echo s > /proc/sysrq-trigger
sleep 10
echo b > /proc/sysrq-trigger
elif [ ${#array[@]} -ne 0 ]; then
INTERFACE=`cat /proc/net/arp | grep -m 1 -v Device | awk '{print $6}'`
echo "----------------MINER IP:`/sbin/ifconfig $INTERFACE | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1 | tr -d '[:blank:]'`"
echo "`/opt/bamt/viewgpu`"
echo ""
fi
for temp in ${array[@]}; do
if [ $temp -lt $targetMinTemp ]; then
echo "`date +%m-%d-%Y` `uptime | awk -F, '{sub(".*ge ",x,$1);print $1}'` card number $i has stopped, its current temp is $temp, coldrebooting" >> /etc/bamt/autoRebooter.log
/sbin/coldreboot &
sleep 30
echo s > /proc/sysrq-trigger
sleep 10
echo b > /proc/sysrq-trigger
fi
i=$(($i+1))
done
EOF

}

cronhost() {
HOST="$MINER1"
PORT="$PORT1"
cron
unset PORT
unset HOST
HOST="$MINER2"
PORT="$PORT2"
cron
unset HOST
unset PORT
HOST="$MINER3"
PORT="$PORT3"
cron
}

viewpool() {
echo -n "1. Specify miner: [1/2/3] "
read miner
if [ "$miner" = '1' ] || [ "$miner" = '2' ] || [ "$miner" = '3' ]; then
if [ "$miner" = '1' ]; then
ssh root@"$MINER1" -p "$PORT1" 'cat /etc/bamt/cgminer.conf'
elif [ "$miner" = '2' ]; then
ssh root@"$MINER2" -p "$PORT2" 'cat /etc/bamt/cgminer.conf'
elif [ "$miner" = '3' ]; then
ssh root@"$MINER3" -p "$PORT3" 'cat /etc/bamt/cgminer.conf'
fi
fi
}

msg() {
echo "Mass mining control, check and status view"
echo ""
echo "Usage: `basename $0` <config|viewpool|status|cron>"
cat <<EOF

Options:
config[#] :change single miner config or all
viewpool[#] :view single miner config - cgminer.conf
status :check miners temps and connected pools
cron :check if miners do actual mining, if idle/hung do coldreboot

Tip: It is possible to put script in crontab to do miners probe.
EOF
}

case "$1" in
config)
config
;;
viewpool)
viewpool
;;
status)
status
;;
cron)
cronhost
;;
*)
msg
exit 1
;;
esac

 

 

Edited by Demontager
Posted

Ищу софт для контролинга большого кол-ва ферм.

Под никс.

 

Семейство дебиан.

 

Авторебут .

Масс смена пулов.

 

И другие решения для упрощения жизни.

 

https://phpminer.com веб интерфейс, меняет пулы на лету и много чего еще. (я использую только для смены пулов)

Posted

 

Ищу софт для контролинга большого кол-ва ферм.

Под никс.

 

Семейство дебиан.

 

Авторебут .

Масс смена пулов.

 

И другие решения для упрощения жизни.

 

https://phpminer.com веб интерфейс, меняет пулы на лету и много чего еще. (я использую только для смены пулов)

 

 

Массовой смены нету там

Хотя я ставил смотрел

Реализация очень даже ничего

 

Может вообще допилим анубис или что то подобное и получим полноценную систему управления тотального контроля ферм ?

 

Есть желание ?

Анубис вроде не совсем то, что требуется. да и с безопасностью там беда.

 

 

А при чем тут безопасность , если все в приделах локальной сети работает?

Держите мой скрипт, может пригодится: http://rghost.ru/52931809 (общий размер около 5 килобайт) - писал на ruby. Умеет смотреть статистику ферм, создавать новый файл pools.conf из шаблона и загружать его через rsync. В планах добавить проверку на sick/dead и сделать авторебут.

 

Требования:

1. должен стоять ruby, так же гемы colorize и erubis. На фермах должен быть разрешен доступ к cgminer api. Cgminer так же должен брать файл по адресу /etc/bamt/autopools.conf (можно изменить в файте upload.sh), это делается такой строчкой:

 

"include" : "/etc/bamt/autopools.conf"

 

2. Нужно предварительно отредактировать файлы cgminer.rb и upload.sh, прописать айпи ферм и пулы. На сервере должен быть настроен вход по ssh без пароля (гуглить по фразе ssh-copy-id)

3. Запуск через консоль: ruby cgminer.rb conf

 

Писалось для себя, лично мне пользоваться этим очень удобно, один раз прописать айпишники ферм и потом одной командой можно постоянно изменить адрес пулов.

 

Кому нужна инфа из первых рук - приглашаю вас в конфу в скайпе, пишите в лс - добавлю.

 

 

Я в ruby не селен, допиливаю то, что понимаю, мне так легче. Но все равно спасибо за труд!

 

Нужна помощь кто знает bash. Суть задачи такая - нужно чтобы на удаленном хосте менялся только конфиг серверов, а настройки видеокарт оставались прежними. Таким образом в скрипте будут только указываются настройки серверов stratum. Я пока думаю как это реализовать, может есть у кого какие мысли.

 

Вторая ревизия скрипта

Изменения:

- Добавил код авторебута, теперь можно прописать выполнение скрипта в cron  и все майнеры будут проверятся на предмет отваливания от майнинга

- Добавил 3 майнера + можно задать ssh порт каждого отдельно

 

#!/bin/bash
# author: demontager
#

MINER1="192.168.1.104"
PORT1="22"
##
MINER2="192.168.1.101"
PORT2="22"
##
MINER3="192.168.1.105"
PORT3="222"
#########################POOL CONFIG####################################
pool() {
echo '{
"pools" : [
        {
                "url" : "stratum+tcp://server:3333",
                "user" : "User",
                "pass" : "x"
        },
    
        {
                "url" : "stratum+tcp://server:3333",
                "user" : "User",
                "pass" : "x"

        }
]
,
"auto-fan" : true,
"auto-gpu" : true,
"temp-cutoff" : "84",
"temp-overheat" : "81",
"temp-target" : "69",
"temp-hysteresis" : "2",
"gpu-fan" : "20-100",
"intensity" : "20",
"worksize" : "256",
"lookup-gap" : "2",
"thread-concurrency" : "24000",
"api-port" : "4028",
"expiry" : "30",
"gpu-platform" : "0",
"gpu-threads" : "1",
"gpu-engine" : "1075",
"gpu-memclock" : "1250",
"gpu-powertune" : "20",
"log" : "5",
"no-pool-disable" : true,
"no-submit-stale" : true,
"queue" : "1",
"scan-time" : "30",
"scrypt" : true,
"shares" : "0",
"kernel-path" : "/usr/local/bin"
}'| ssh root@$HOST -p $PORT 'cat > /etc/bamt/cgminer.conf'
}
#############################END########################################

config() {
echo -n "1. Specify miner: [1/2/3] (default:all) "
read miner
if [ "$miner" = '1' ] || [ "$miner" = '2' ] || [ "$miner" = '3' ]; then
  if [ "$miner" = '1' ]; then
    HOST="$MINER1"
    PORT="$PORT1"
    pool
    ssh root@"$MINER1" -p "$PORT1" 'mine restart'
  elif [ "$miner" = '2' ]; then
    HOST="$MINER2"
    PORT="$PORT2"
    pool
    ssh root@"$MINER2" -p "$PORT2" 'mine restart'
  elif [ "$miner" = '3' ]; then
    HOST="$MINER3"
    PORT="$PORT3"
    pool
    ssh root@"$MINER3" -p "$PORT3" 'mine restart'
  fi
elif [ "$miner" = 'all' ] || [ "$miner" = '' ]; then
    HOST="$MINER1"
    PORT="$PORT1"
    pool
    ssh root@"$MINER1" -p "$PORT1" 'mine restart'
    unset HOST
    unset PORT
    HOST="$MINER2"
    PORT="$PORT2"
    pool
    ssh root@"$MINER2" -p "$PORT2" 'mine restart'
    unset HOST
    unset PORT
    HOST="$MINER3"
    PORT="$PORT3"
    pool
    ssh root@"$MINER3" -p "$PORT3" 'mine restart'    
fi
}

status() {
echo ""
echo "-----------------MINER IP:$MINER1"	
ssh root@"$MINER1" -p "$PORT1" '/opt/bamt/viewgpu'
echo "" 	
echo "-----------------MINER IP:$MINER2"
ssh root@"$MINER2" -p "$PORT2" '/opt/bamt/viewgpu'
echo ""
echo "-----------------MINER IP:$MINER3"
ssh root@"$MINER3" -p "$PORT3" '/opt/bamt/viewgpu'
echo ""
}




cron() {
cat <<'EOF' | ssh root@$HOST -p $PORT 'cat - > /etc/bamt/cardcheck.sh && chmod +x /etc/bamt/cardcheck.sh && /etc/bamt/cardcheck.sh'
targetMinTemp=50
i=0
(/opt/bamt/viewgpu | awk '{ print $2; }' | cut -c -2 > /tmp/viewgpu)
sleep 5
array=(`cat /tmp/viewgpu`)
if [ ${#array[@]} -eq 0 ]; then
  echo "`date +%m-%d-%Y` `uptime | awk -F, '{sub(".*ge ",x,$1);print $1}'` viewgpu command failed to run, rebooting" >>  /etc/bamt/autoRebooter.log
  /sbin/coldreboot &
  sleep 30
  echo s > /proc/sysrq-trigger
  sleep 10
  echo b > /proc/sysrq-trigger
elif [ ${#array[@]} -ne 0 ]; then
   INTERFACE=`cat /proc/net/arp | grep -m 1 -v Device | awk '{print $6}'`
   echo "----------------MINER IP:`/sbin/ifconfig $INTERFACE | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1 | tr -d '[:blank:]'`"
   echo "`/opt/bamt/viewgpu`"
   echo ""
fi
for temp in ${array[@]}; do
  if [ $temp -lt $targetMinTemp ]; then
    echo "`date +%m-%d-%Y` `uptime | awk -F, '{sub(".*ge ",x,$1);print $1}'` card number $i has stopped, its current temp is $temp, coldrebooting" >> /etc/bamt/autoRebooter.log
    /sbin/coldreboot &
    sleep 30
    echo s > /proc/sysrq-trigger
    sleep 10
    echo b > /proc/sysrq-trigger
  fi
i=$(($i+1))
done
EOF

}

cronhost() {
HOST="$MINER1"
PORT="$PORT1"
cron
unset PORT
unset HOST
HOST="$MINER2"
PORT="$PORT2"
cron
unset HOST
unset PORT
HOST="$MINER3"
PORT="$PORT3"
cron	
}

viewpool() {
echo -n "1. Specify miner: [1/2/3] "
read miner
if [ "$miner" = '1' ] || [ "$miner" = '2' ] || [ "$miner" = '3' ]; then
  if [ "$miner" = '1' ]; then
    ssh root@"$MINER1" -p "$PORT1" 'cat /etc/bamt/cgminer.conf'	
  elif [ "$miner" = '2' ]; then
    ssh root@"$MINER2" -p "$PORT2" 'cat /etc/bamt/cgminer.conf'
  elif [ "$miner" = '3' ]; then
    ssh root@"$MINER3" -p "$PORT3" 'cat /etc/bamt/cgminer.conf'
  fi
fi     	
}

case "$1" in
        config)
                config
                ;;
        viewpool)
                viewpool                                                  
                ;;
         status)
                status
                 ;;       
           cron)
                 cronhost
                 ;;
           *)
                echo "Usage: `basename $0` (config|status|viewpool|cron)"
                exit 1
                ;;
esac

 

 

 

Красавцы

Давайте дальше развивать идею

Posted

-Добавил ребут выбранного майнера или всех сразу. Сначала проверяются живые, потом делается выбор, чтобы не сделать ошибку. Если все сразу в ребут, еще дополнительно запрашивает подтверждение.


 

 

#!/bin/bash
# author: demontager
#

MINER1="192.168.1.101"
PORT1="225"
##
MINER2="192.168.1.103"
PORT2="226"
##
MINER3="192.168.1.105"
PORT3="222"
#########################POOL CONFIG####################################
pool() {
cat <<'EOF' | ssh root@$HOST -p $PORT 'cat - > /tmp/pool.tmp && sed -n "/]/{:a;n;/}/b;p;ba}" /etc/bamt/cgminer.conf > /tmp/cgminer.conf.tmp \
&& cat /tmp/pool.tmp /tmp/cgminer.conf.tmp > /etc/bamt/cgminer.conf && echo "}" >> /etc/bamt/cgminer.conf \
&& rm /tmp/pool.tmp /tmp/cgminer.conf.tmp'
{
"pools" : [
{
"url" : "stratum+tcp://server.com:3333",
"user" : "User",
"pass" : "x"
},

{
"url" : "stratum+tcp://server1.com:3333",
"user" : "User",
"pass" : "x"

}
]
EOF
}
#############################END########################################

config() {
echo -n "1. Specify miner: [1/2/3] (default:all) "
read miner
if [ "$miner" = '1' ] || [ "$miner" = '2' ] || [ "$miner" = '3' ]; then
if [ "$miner" = '1' ]; then
HOST="$MINER1"
PORT="$PORT1"
pool
ssh root@"$MINER1" -p "$PORT1" 'mine restart'
elif [ "$miner" = '2' ]; then
HOST="$MINER2"
PORT="$PORT2"
pool
ssh root@"$MINER2" -p "$PORT2" 'mine restart'
elif [ "$miner" = '3' ]; then
HOST="$MINER3"
PORT="$PORT3"
pool
ssh root@"$MINER3" -p "$PORT3" 'mine restart'
fi
elif [ "$miner" = 'all' ] || [ "$miner" = '' ]; then
HOST="$MINER1"
PORT="$PORT1"
pool
ssh root@"$MINER1" -p "$PORT1" 'mine restart'
unset HOST
unset PORT
HOST="$MINER2"
PORT="$PORT2"
pool
ssh root@"$MINER2" -p "$PORT2" 'mine restart'
unset HOST
unset PORT
HOST="$MINER3"
PORT="$PORT3"
pool
ssh root@"$MINER3" -p "$PORT3" 'mine restart'
fi
}

status() {
echo ""
echo "| 1 |______________MINER IP:$MINER1"
ssh root@"$MINER1" -p "$PORT1" '/opt/bamt/viewgpu'
echo ""
echo "| 2 |______________MINER IP:$MINER2"
ssh root@"$MINER2" -p "$PORT2" '/opt/bamt/viewgpu'
echo ""
echo "| 3 |______________MINER IP:$MINER3"
ssh root@"$MINER3" -p "$PORT3" '/opt/bamt/viewgpu'
echo ""
}




cron() {
cat <<'EOF' | ssh root@$HOST -p $PORT 'cat - > /etc/bamt/cardcheck.sh && chmod +x /etc/bamt/cardcheck.sh && /etc/bamt/cardcheck.sh'
targetMinTemp=50
i=0
(/opt/bamt/viewgpu | awk '{ print $2; }' | cut -c -2 > /tmp/viewgpu)
sleep 5
array=(`cat /tmp/viewgpu`)
if [ ${#array[@]} -eq 0 ]; then
echo "`date +%m-%d-%Y` `uptime | awk -F, '{sub(".*ge ",x,$1);print $1}'` viewgpu command failed to run, rebooting" >> /etc/bamt/autoRebooter.log
/sbin/coldreboot &
sleep 30
echo s > /proc/sysrq-trigger
sleep 10
echo b > /proc/sysrq-trigger
elif [ ${#array[@]} -ne 0 ]; then
INTERFACE=`cat /proc/net/arp | grep -m 1 -v Device | awk '{print $6}'`
echo "----------------MINER IP:`/sbin/ifconfig $INTERFACE | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1 | tr -d '[:blank:]'`"
echo "`/opt/bamt/viewgpu`"
echo ""
fi
for temp in ${array[@]}; do
if [ $temp -lt $targetMinTemp ]; then
echo "`date +%m-%d-%Y` `uptime | awk -F, '{sub(".*ge ",x,$1);print $1}'` card number $i has stopped, its current temp is $temp, coldrebooting" >> /etc/bamt/autoRebooter.log
/sbin/coldreboot &
sleep 30
echo s > /proc/sysrq-trigger
sleep 10
echo b > /proc/sysrq-trigger
fi
i=$(($i+1))
done
EOF

}

cronhost() {
HOST="$MINER1"
PORT="$PORT1"
cron
unset PORT
unset HOST
HOST="$MINER2"
PORT="$PORT2"
cron
unset HOST
unset PORT
HOST="$MINER3"
PORT="$PORT3"
cron
}

viewpool() {
echo -n "1. Specify miner: [1/2/3] "
read miner
if [ "$miner" = '1' ] || [ "$miner" = '2' ] || [ "$miner" = '3' ]; then
if [ "$miner" = '1' ]; then
ssh root@"$MINER1" -p "$PORT1" 'cat /etc/bamt/cgminer.conf'
elif [ "$miner" = '2' ]; then
ssh root@"$MINER2" -p "$PORT2" 'cat /etc/bamt/cgminer.conf'
elif [ "$miner" = '3' ]; then
ssh root@"$MINER3" -p "$PORT3" 'cat /etc/bamt/cgminer.conf'
fi
fi
}

reboot() {
echo -n "Probing for alive miners..."
sleep 2
echo ""
status
echo -n "Enter selected miner to reboot (1/2/3/all) "
read miner
if [ "$miner" = '1' ] || [ "$miner" = '2' ] || [ "$miner" = '3' ]; then
if [ "$miner" = '1' ]; then
ssh root@"$MINER1" -p "$PORT1" '/sbin/coldreboot'
elif [ "$miner" = '2' ]; then
ssh root@"$MINER2" -p "$PORT2" '/sbin/coldreboot'
elif [ "$miner" = '3' ]; then
ssh root@"$MINER3" -p "$PORT3" '/sbin/coldreboot'
elif [ "$miner" = 'all' ] || [ "$miner" = '' ]; then
echo -n "Are sure to reboot all miners ? (y/n) "
read choice
if [ "$choice" = 'y' ]; then
ssh root@"$MINER1" -p "$PORT1" '/sbin/coldreboot'
ssh root@"$MINER2" -p "$PORT2" '/sbin/coldreboot'
ssh root@"$MINER3" -p "$PORT3" '/sbin/coldreboot'
else
echo -n "Miners not rebooted"
exit 0
fi
fi
else
echo -n "Miner not valid"
echo ""
exit 1
fi
}
msg() {
echo "Mass mining control, check and status view"
echo ""
echo "Usage: `basename $0` <config|viewpool|status|cron>"
cat <<EOF

Options:
config[#] :change single miner config or all
viewpool[#] :view single miner config - cgminer.conf
status :check miners temps and connected pools
cron :check if miners do actual mining, if idle/hung do coldreboot
reboot :reboot selected miner or all

Tip: It is possible to put script in crontab to do miners probe.
EOF
}

case "$1" in
config)
config
;;
viewpool)
viewpool
;;
status)
status
;;
cron)
cronhost
;;
reboot)
reboot
;;
*)
msg
exit 1
;;
esac


 

 

Posted

можешь прикрутить данный функционал допустим к тому же анубису или phpminer ?

Posted (edited)

Все можно, только там на php уже придется делать.  Честно говоря необходимости для себя делать подобное в том же phpminer не вижу.  Моя цель - это максимально упростить контроль ферм в терминале, без GUI/вебинтерфейса.

В планах что хочу сделать еще:

-добавить автоконтроль температур, если выше какого-то значения, уменьшать интенсивность майнинга.

-информирование о обрыве связи с пулом/смене пула/отваливания карты от майна

-интерактивное меню выбора функций

-конфиг для conky для вывода инфы на рабочем столе Linux

Edited by Demontager
Posted

еще бы прикрутить авторебут через модуль Jerome и будет шоколад вообще ))))

Posted

Лучше бы сделать приблуду/скриптик/что_угодно_другое, что бы в нужный COM (например, /dev/tty_USBX) засылала определённую команду (без разницы) при загрузке (для запуска watch-dog'а), а затем раз в N секунд другую команду/символ, сигнализирующий, что всё нормально. Если команда не пришла N * X секунд (где X = 5...10, что бы уж наверняка), то беда... Замыкаем RESET, ждём команду на очередной запуск Watch-dog'а.

А то хотел запилить вотч-дог на микроконтроллере, но на "комповой" стороне вышел затык...

Posted

У этой штуки есть как минимум 2 минуса:

1. неизвестно, не будут ли риги время от времени "донатить";

2. оно, можно сказать, не работает под линухом, т.к. в BAMT нет поддержки Mono (да и сомнительно, что оно вообще разрабатывалось с поддержкой Mono, а тонкости совместимости есть), а заморачиваться с полным дистрибутивом - особого смысла не имеет.

Posted (edited)

Почти полностью переписал начальный скрипт с добавлением нескольких новых функций. Проверил работоспособность на Lubuntu 13.10, будет работать на всех Debian based и др. Linux, только если не Debian, тогда нужно чуть отредактировать скрипт. Могу сделать конечно, но пока не требуется.

Желательно установить BAMT 1.6, так как именно под него писал функцию смены cgminer/sgminer/vertminer. Но будет работать все остальное и на BAMT 1.3 без этой функции.

 

Список изменений

 

-Теперь скрипт работает в интрерактивном режиме

-Можно добавить неограниченое количество майнеров, (было 3)

-Автоматически делается авторизация к майнерам без пароля

-Можно задать свои цвета для сообщений, менюшек

-Добавлена возможность переключения cgminer/sgminer на сервере + можно переключать на свой кастомный.

-Добавлен мониторинг серверов в live режиме (см. скрин)

-По прежнему скрипт можно запустить через cron, но с параметром (см. пункт 7)

 

Начальная настройка:

 

1. Скачать скрипт в любую директорию

2. Дать права на исполнение chmod +x mine.sh

3. Отредактировань в скрипте свои значеия  ip серверов и майнинг пулов

4. Запустить ./mine.sh

5. При первом запуске необходимо настроить беспарольную авторизацию, нажать 7 и проследовать инструкциям на экране

6. Вернуться в стартовое меню и выбрать нужное действие

7. (Опционально) Если нужна функция автоматической проверки работоспособности майнеров через cron, тогда скрипт нужно запустить с параметром cron, т.е. если к примеру необходимо каждые 20 минут проверять, тогда добавляем в crontab такую строку

*/20 * * * * /mine.sh cron

 

 

 

 

Скачать скрипт

 

Github, все последующие изменения в коде буду постить туда https://github.com/Demontager/minessh

 

UPD. Поправил меню для ребута и пулов. Прямую ссылку c файлообменника убрал, самая обновленная версия скрипта только на Github

post-13621-0-74494100-1395590133_thumb.png

post-13621-0-37772800-1395590201_thumb.png

post-13621-0-82899600-1395590309_thumb.png

Edited by Demontager
Posted (edited)

#22 icon_share.png Demontager

небольшая поправка по 4 пункту (Запустить ./mine.sh) лучше будет (болие явно для bash)  sh '/your_path/mine.sh' а то в некоторых линуксах (лайвовых) ./*.sh криво работает по крайненей мере я с таким сталкивался

Edited by ЯzzzЪ
Posted (edited)

Круто! А на SMOS работать будет?

Будет, только функция смены майнеров не отработает. Или можно положить скомпилированные в папку /opt/miners. А лучше просто скопировать с BAMT 1.6, если уже SMOS 1.3/BAMT 1.3 явлется принципиальным.

ЯzzzЪ, не припоминаю где так криво работает. На 99% Linux как я написал, будет работать.

 

Кто-то пользуется реально скриптом ? Если да, то напишу еще как добавить свой кастомный майнер.  Пока получилил 2 предложения по расширению фунций:

1. Добавить возможность следить за состоянием карт sick/dead.  Но скрипт вообщем и так отработает, так как если какая-то из карт станет sick/dead, со вренем ее температура упадет ниже установленного лимита 52 град и тогда отправится два сигнала на перезагрузку компьютера coldreboot и если не отработает, тогда еще echo s > /proc/sysrq-trigger и echo b > /proc/sysrq-trigger

 

 

2. Добавить мониторинг в реальном времени для короткой статистики майнеров (пункт 1 меню).  Будет полезно у кого более 5 майнеров, должно компактней занимать площадь одного экрана. Если уже очень много 10 и выше, тогда можно пускать несколько копий скрипта, только в каждой копии прописывать необходимые майнеры.

 

От себя хочу сделать еще возможность быстро логится по ssh и вручную править конфиги.

Edited by Demontager

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Topics

    • В Свердловской области задержаны организаторы незаконных майнинговых ферм

      Полиция Свердловской области пресекла работу незаконных ферм для майнинга, причинивших ущерб крупной энергетической компании на 16 млн рублей, сообщила официальный представитель МВД России Ирина Волк. По словам Ирины Волк, организаторы майнинговых ферм незаконно подключили оборудование к объектам электроснабжения в городах Нижний Тагил и Кушва.   «В результате оперативно-розыскных мероприятий по нескольким адресам обнаружено в общей сложности свыше 10 000 единиц майнингового оборудов

      in Новости криптовалют

    • Гана ужесточит контроль за рекламой криптовалют

      Комиссия по ценным бумагам и биржам Ганы (SEC) предупредила знаменитостей и инфлюенсеров о недопустимости продвижения криптовалют без необходимого разрешения, пригрозив за нарушения штрафными санкциями. Заместитель председателя SEC Менса Томпсон (Mensah Thompson) заявил, что из-за высокой волатильности цифровых активов регулятор будет строже контролировать их рекламу и продвижение в соцсетях. Рекламировать криптовалюты в стране смогут только те лица и организации, которые получили лицензию

      in Новости криптовалют

    • «Россети Северный Кавказ»: В Дагестане выявлено 79 незаконных майнинг-ферм

      Дагестан продолжает лидировать среди регионов Северо-Кавказского федерального округа по количеству незаконных ферм для майнинга, сообщили энергетики «Россети Северный Кавказ». Несмотря на запрет на майнинг до марта 2031 года, в регионах Северного Кавказа продолжает действовать большое количество майнеров, подключающихся к сетям напрямую без заключения договоров, сообщили энергетики. С начала года на территории Северо-Кавказского федерального округа было выявлено свыше 100 незаконных ферм, а

      in Новости криптовалют

    • Власти Израиля намерены ужесточить контроль за эмитентами стейблкоинов

      Банк Израиля на профильной конференции в Тель-Авиве заявил о скором запуске цифрового шекеля и объявил об усилении регуляторного надзора за эмитентами стейблкоинов. Глава Банка Израиля Амир Ярон (Amir Yaron) в докладе на межбанковской конференции «Платежи в эпоху перемен» подчеркнул, что регулятор планирует сосредоточить свои усилия на запуске в 2026 году национальной системы платежей «Цифровой шекель». В связи с этим, Банк Израиля планирует усилить надзор за оборотом частных стейблкоинов и

      in Новости криптовалют

    • Власти Кыргызстана назвали причину отключения ферм для майнинга

      Министр энергетики Кыргызстана Таалайбек Ибраев заявил, что все фермы для майнинга криптовалют в республике отключены из-за дефицита энергетических мощностей. По словам Ибраева, производство электроэнергии в стране, где ее главным источником являются гидроэлектростанции (ГЭС), испытывает трудности из-за падения уровня воды в Токтогульском водохранилище до критически низкого — почти на 2 млрд кубометров меньше, чем в 2024 году.   «В нынешних условиях дефицита электроэнергии принято ре

      in Новости криптовалют

×
×
  • Create New...