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

Данный скрипт актуален для 26 эпизода.
Внимание! Все версии скрипта до 0.13 включительно перестали работать.
Связано это с тем что в 12 эпизоде разработчики требуют пароль для входа в клиент. Скрипт обновлен и теперь он умеет работать с паролем, НО! Теперь пароль к вашему кошельку будет хранится в отдельном файле в открытом виде. И исключительно вам решать нужно ли это вам.
Еще одно НО — пока ваша нода не забутстраплена — скрипт будет писать в логах что нода не в онлайн и естественно ничего не сможет купить.

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

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

cd /root

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

sudo tee /root/rollsup.sh > /dev/null <<EOF
#!/bin/sh
#Версия 0.15
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%%.*}
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 [ \$candidat -gt "0" ];then
echo "Ok" > /dev/null
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 1 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 из официальных бинарников

 

 

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