Всем хороши аппаратные вочдоги, кроме одного - на старых мат.платах они не могут следить за включением рига. Т.к. для того, что бы вочдог заработал должно появиться питание в USB порту, а на старушках этого не происходит. Конечно, в БИОСе можно выставить автоматическое включение при подаче питания, но практика показывает, что срабатывает это далеко не всегда.
Идея заключается в том, что бы использовать вместо аппаратных вочдогов USB-реле, которые будут замыкать контакты reset\power на мат плате, что бы перезагрузить риг, если тот перестанет пинговаться. Разумеется эти реле нужно включать в другой компьютер, который будет следить за доступностью рига, или например в роутер, если он прошит нормальной прошивкой типа openWRT. Впрочем, если у Вас два и более рига, то они смогут следить друг за другом. Или можно купить аппаратный вочдог с резервной батареей для одного рига, и подключить к нему реле для слежки за остальными ригами.
Реле я купил тут
Это двухканальная модель, можно купить одноканальную, или четырёх и более канальные, в зависимости от Ваших потребностей, разницы нет.
Для работы реле потребуется установить эту упраляющую ими совтину
Если на одном компьютере используется несколько реле, то нужно сменить серийные имена их портов, т.к. по умолчанию они у всех реле одинаковые, но если реле одно, то можно не менять.
Для управления реле я написал следующий скрипт, сохраните его в файле /root/ping_rig.sh:
#!/bin/bash
HOST=192.168.1.101
# serial name of USB relay port connected to power switch of HOST
SERIAL=PSUIS_1
# ping tries before reset
MAX_PING_TRIES=100
# reset count before script terminates
MAX_RESETS=5
# current reset #
CUR_RESET=1
while true
do
echo "Pinging $HOST"
if ping -c 1 $HOST; then
# HOST is responding - everything is fine
echo -e "\e[32m$HOST responds\e[0m"
CUR_RESET=1
#echo "$HOST responds"
else
#host isn't responding - try to ping it for $MAX_PING_TRIES times
echo -e "\e[31m$HOST not responding, trying for $MAX_PING_TRIES times\e[0m"
# flag to know responds HOST or not
B_PING=0
for i in `seq 1 $MAX_PING_TRIES`; do
echo -e "\e[31m$i\e[0m"
#echo "$i"
if ping -c 1 $HOST; then
# finally HOST's responded - changing the flag and reser CUR_RESET counter
echo -e "\e[32m$HOST responds\e[0m"
B_PING=1
CUR_RESET=1
break
fi
sleep 1
done
if [ $B_PING -eq 0 ]; then
if [ $CUR_RESET -gt $MAX_RESETS ]; then
echo -e "\e[31mMax reset reached. Script terminates\e[0m"
break
fi
echo -e "\e[31mReseting $HOST #$CUR_RESET\e[0m"
# power off the HOST by short-circuit power switch for 5 sec
usbrelay "$SERIAL"=1
sleep 5
usbrelay "$SERIAL"=0
# pause for 3 sec
sleep 3
# power on the HOST by short-circuit power switch for 0.05 sec
usbrelay "$SERIAL"=1
sleep 0.05
usbrelay "$SERIAL"=0
# increasing CUR_RESET counter
CUR_RESET=`expr $CUR_RESET + 1`
fi
fi
sleep 10
done
Для его автозапуска нужно добавить в /etc/rc.local выше exit(0) следующую строку:
screen -dmS ping_rig . /root/ping_rig.sh
Так скрипт запустится в screen, как и майнеры. Его работу можно проверить по алиасу ping_rig.
Если нужно пинговать несколько ригов, то делаете копию скрипта, например /root/ping_rig_1.sh, меняете в ней адрес хоста и серийное имя порта на реле и добавляете её в автозагрузку.
На басурманский переводить не буду, пусть курят translate.google.com