Перейти к содержимому
itraxe

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

Рекомендуемые сообщения

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

Под никс.

 

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

 

Авторебут .

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

Хотел тоже такой контроль, так как 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
Изменено пользователем Demontager

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

Держите мой скрипт, может пригодится: 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

 

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

 

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

Изменено пользователем FancyDancy

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

Я в 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

 

 

Изменено пользователем Demontager

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

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

 

 

Изменено пользователем Demontager

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Под никс.

 

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

 

Авторебут .

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

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

Под никс.

 

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

 

Авторебут .

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

 

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

 

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

 

 

 

Красавцы

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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


 

 

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


 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

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

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

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

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

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

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

Изменено пользователем Demontager

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

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

Изменено пользователем Demontager

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

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

Изменено пользователем ga6iem

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

#22 icon_share.png Demontager

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

Изменено пользователем ЯzzzЪ

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

Круто! А на 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 и вручную править конфиги.

Изменено пользователем Demontager

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×