Jump to content

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


 Share

Recommended Posts

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

Под никс.

 

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

 

Авторебут .

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

 

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Хотел тоже такой контроль, так как 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
Link to comment
Share on other sites

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

 

#!/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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

 

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

Link to comment
Share on other sites

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

 

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

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

Link to comment
Share on other sites

Держите мой скрипт, может пригодится: 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
Link to comment
Share on other sites

Я в 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
Link to comment
Share on other sites

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

 

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

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

 

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

Link to comment
Share on other sites

Да, можно и так, но хочется еще как я написал. Хотя можно и в сам скрипт прописать чтобы автоматически менял 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
Link to comment
Share on other sites

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

Под никс.

 

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

 

Авторебут .

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

 

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

 

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

Link to comment
Share on other sites

 

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

Под никс.

 

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

 

Авторебут .

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

 

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

 

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

 

 

 

Красавцы

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

Link to comment
Share on other sites

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


 

 

#!/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


 

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

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

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

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

Edited by Demontager
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

Почти полностью переписал начальный скрипт с добавлением нескольких новых функций. Проверил работоспособность на 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
Link to comment
Share on other sites

#22 icon_share.png Demontager

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

Edited by ЯzzzЪ
Link to comment
Share on other sites

Круто! А на 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
Link to comment
Share on other sites

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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Topics

    • Сенаторы США призвали PCAOB ужесточить контроль за аудиторами криптокомпаний

      Сенаторы Элизабет Уоррен и Рон Уайден выразили обеспокоенность по поводу авторитета Комиссии по надзору за бухгалтерским учетом публичных компаний (PCAOB) в связи с крахом криптовалютной биржи FTX. Демократы Элизабет Уоррен (Elizabeth Warren) из штата Массачусетс и Рон Уайден (Ron Wyden) из штата Орегон направили письмо в PCAOB, потребовав, чтобы ведомство применяло более строгие стандарты для аудиторских компаний. Сенаторы обеспокоены тем, что аудиторы могут применять сомнительные методы п

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

    • ОАЭ усиливает контроль за рынком виртуальных активов

      Власти Объединенных Арабских Эмиратов объявили, что контроль за рынком виртуальных активов, включая общий надзор, теперь будет осуществляться не только отдельными эмиратами, но и на уровне страны. Новые директивы вступают в силу 15 января 2023 года. Это первый случай, когда чиновники ОАЭ вводят подобные правила для Web3-пространства на столь высоком уровне.   Заявленная чиновниками цель состоит в «обеспечении безопасности инвесторов» и мониторинге криптоиндустрии. По мнению регулятор

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

    • allminer.ru, мониторинг ферм Allminer

      Здравствуйте.   Хотим представить Вам сервис для мониторинга ферм.   Внимание! С 1 Апреля 2018 года сервис https://allminer.ru    переходит на платную основу 0-2 Рига - Бесплатно 3-50 Рига - 50р в месяц с рига или 1.65 в день 50+ 40р в месяц с рига или 1.35 в день   Гостевой период для новых пользователей - 2 недели на сто ригов.     Поддержка ASIC: AntMiner S9 beta   Поддержка GPU: AMD - 460,

      in Мониторинг

    • Фотографии наших ферм

      Начну с одной, в создании которой я непосредственно участвовал: 12 х Radeon HD 5850/ Выдает 4Гхэш, жрет 3 КВт. -------------- Можно прямо в тему фото выкладывать. А так же в альбом ферм в нашей группе вКонтакте   -------------- Альтернативная ветка на bitcointalk.org: https://bitcointalk.org/index.php?topic=7216.0

      in Аппаратная часть

    • SCB: Атаки на FTX подтверждают правильность решения взять под контроль активы биржи

      Комиссия по ценным бумагам Багамских островов (SCB) заявила, что она приняла правильное решение, взяв под контроль активы банкротящейся криптовалютной биржи FTX. Согласно заявлению SCB, тот факт, что «системы FTX были скомпрометированы и продолжают сталкиваться с новыми попытками взлома, подтверждает своевременность оперативных действий Комиссии по защите этих цифровых активов».    11 ноября, когда FTX подала заявление о банкротстве, криптосообщество заметило отток активов с биржи на

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

×
×
  • Create New...