Контроль за падением rolls и автоматическая их покупка

Данный скрипт актуален для 2 версии майнета.

Данная версия скрипта в случае слета rolls и возврата монет на кошелек покупает сразу «на всю котлету». И если в результате вы намайнили монеток на покупку очередного ролла — он это делает
(Еще, в результате эксплуатации данного скрипта выяснилось — что кое где при установке OC не устанавливается консольный калькулятор bc. Поэтому поставим его еще раз, на всякий случай)

sudo apt-get update && sudo apt-get install bc

Легкая прелюдия:
Первым сигналом того что наши роллы слетели или вот-вот слетят это ноль в строке «Candidate=0»
Следовательно этот параметр и будем отслеживать.
Что делает скрипт:
Он раз в три минуты смотрит на этот параметр и если он стал равен нулю покупает роллы, не дожидаясь пока слетевшие вернуться в монетки, если они есть.
(Поскольку теперь все роллы будут на балансе, скорее всего скрипт будет ждать когда роллы опять превратятся в монетки)
Скрипт лежит в файле rollsup.sh в папке /root
Скрипт сам, в процессе работы создаст файл для логирования событий
Запускается при помощи демона crontab который является частью OC Linyx
Все команды представленные в этом руководстве выполняются в командной строке вашего терминала.
Для того что бы скрипт оперативно купил ролл, предполагается что у вас в клиенте есть достаточное количество монеток. Иначе скрипт отработает только тогда ваши слетевшие роллы опять превратятся в монетки. Т.е для нормальной работы скрипта необходимо что бы у вас был 1 активный ролл и еще 100 или более монеток на балансе, (данное условие на данный момент не актуально) для того что бы скрипт оперативно купил еще один ролл, вместо слетевшего.

Поехали

Переходим в папку рута:

cd /root

Копируем блок текста расположенный ниже и вставляем весь в командную строку (в конце страницы есть видео как это сделать если что то не понятно). В итоге автоматически будет создан файл rollsup.sh

sudo tee /root/rollsup.sh > /dev/null <<EOF
#!/bin/sh
#Версия 0.17
cd /root/massa/massa-client
#Set variables
catt=/usr/bin/cat
passwd=\$(\$catt \$HOME/mspasswd)
candidat=\$(./massa-client wallet_info -p "\$passwd"|grep 'Rolls'|awk '{print \$4}'| sed 's/=/ /'|awk '{print \$2}')
massa_wallet_address=\$(./massa-client -p "\$passwd" wallet_info |grep 'Address'|awk '{print \$2}')
tmp_final_balans=\$(./massa-client -p "\$passwd" wallet_info |grep 'Balance'|awk '{print \$3}'| sed 's/=/ /'|sed 's/,/ /'|awk '{print \$2}')
final_balans=\${tmp_final_balans%%.*}
buy_amount=\$(echo "scale=2; \$final_balans / 100" | bc)
buy_amount=\$(echo "\$buy_amount" | cut -f1 -d.)
averagetmp=\$(\$catt /proc/loadavg | awk '{print \$1}')
node=\$(./massa-client -p "\$passwd" get_status |grep 'Error'|awk '{print \$1}')
if [ -z "\$node" ]&&[ -z "\$candidat" ];then
echo \`/bin/date +"%b %d %H:%M"\` "(rollsup) Node is currently offline" >> /root/rolls.log
elif [ \$final_balans -gt "99" ]; then
echo \`/bin/date +"%b %d %H:%M"\` "(rollsup) The roll flew off, we check the number of coins and try to buy" >> /root/rolls.log
resp=\$(./massa-client -p "\$passwd" buy_rolls \$massa_wallet_address \$buy_amount 0)
else
echo \`/bin/date +"%b %d %H:%M"\` "(rollsup) Not enough coins to buy a roll from you \$final_balans, minimum 100" >> /root/rolls.log
fi
EOF

Добавляем задание демону cron  на выполнение файла rollsup.sh каждые три минуты
Будем использовать локальный демон. Задание будет находиться в файле massarolls и располагаться в папке /etc/cron.d/
(Блок ниже нужно скопировать и вставить сразу весь, в командной строке, не построчно.)

printf "SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/3 * * * * root /bin/bash /root/rollsup.sh > /dev/null 2>&1
" > /etc/cron.d/massarolls

Прописываем пароль для доступа к клиенту в отдельный файл
(Блок ниже нужно скопировать и вставить сразу весь, в командной строке, не построчно. Вместо фразы — «Вместо этой строчки пишите ваш пароль» указываете свой пароль )

sudo tee $HOME/mspasswd > /dev/null <<EOF
Вместо этой строчки пишите ваш пароль
EOF

На этом собственно все.

Создаем файл куда будем писать логи скрипта

sudo tee $HOME/rolls.log > /dev/null <<EOF
Лог файл создан удачно.
EOF

Посмотреть последние 50 строк лога

tail -n50 /root/rolls.log

Очистить содержимое лога

cat /dev/null > /root/rolls.log

Файл с логом создается при первом событии сигнализирующем что с нодой что то не так. Если вы установили скрипт и у вас все работает нормально
то при попытке посмотреть лог вполне вероятно что вы получите ошибку что такой файл не существует.

Удаление скрипта
Сейчас пользователи у которых качество серверов совсем ни какое (привет Контабо) плачутся, что скрипт поставили, а он не работает. Или более того — скрипт поставили и теперь нода стала зависать, роллы слетать.
Объяснять таким товарищам что данный скрипт ни как не вмешивается в работу их ноды я уже устал, поэтому ниже команды которые полностью удаляют данный скрипт с вашего сервера.
Удаляем сам скрипт

/usr/bin/rm /root/rollsup.sh

Удаляем файл запуска скрипта по времени

/usr/bin/rm /etc/cron.d/massarolls

Удаляем log-файл

/usr/bin/rm /root/rolls.log

 

Что еще почитать по ноде Massa:
Massa — как «прикурится» от ноды друга
Утечка памяти — определяем — перегружаем ноду
Почему слетают rolls и что с этим делать?
Костыль для 8 эпизода ноды massa
Установка ноды Massa из официальных бинарников

 

 

Если у вас есть что сказать по тексту статьи или «напихать» автору — добро пожаловать в телеграм-канал