Данный скрипт актуален для 2 версии майнета.
В текущей версии добавлена комиссия за транзакцию 0,01 mass
Поскольку разработчики вводят обязательную комиссию на транзакцию скрипт подправлен с учетом этих требований.
Данная версия скрипта в случае слета 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.18 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.01) 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 из официальных бинарников
Если у вас есть что сказать по тексту статьи или «напихать» автору — добро пожаловать в телеграм-канал