Продлеваем агонию жизни ноды Massa на плохом хостинге

В связи с изменившимися условиями начиная с 8 эпизода — данный скрипт скорее принесет больше вреда чем пользы.
На данный момент не рекомендуется к установке!

Как удалить скрипт:

Удаляем сам скрипт
/usr/bin/rm /root/rebmassa.sh
Удаляем файл запуска скрипта по времени
/usr/bin/rm /etc/cron.d/rebmassa
Удаляем log-файл
/usr/bin/rm /root/rolls.log

 

 

Скрип бы переписан заново и кто успел установить себе первую версию, просьба обновить основной скрипт. Скрипт следит за неким состоянием ноды — а точнее за подвисанием выдачи.
Как показывает практика подвисание ноды сопровождается оповещением в лог файл одной из следующих записей
«sent us critically incorrect header, which may be an attack attempt by the remote node or a loss of sync between us and the remote node»
«Check the stability of your node/connection to avoid further misses, then buy rolls again»
«Failed to send ProtocolPoolEvent due to timeout»
возможно и другие, но эти чаще всего.
Бывает что основной лог тоже зависает вместе с нодой — в таком случае данный скрипт будет бессилен.
Скрипт раз в минуту анализирует последние 80 записей из лога связанных с нодой и если находит одну из вышеперечисленных записей то считает ноду подвисшей и перезапускает ее. Если же не находит — считает что все хорошо и заканчивает работу
(последние 80 записей — взято примерно, и возможен вариант когда за последнюю минуту нода накидает еще каких ни будь строчек и триггер выпадет из последних 80 строк. С другой стороны нам нужно что бы после перезагрузки ноды мы не словили в логах тот же самый триггер несколько раз и лишний раз не перегружали ноду) Можете поиграться с этим параметром сами, заменив цифру 80 в двух строчках на ту которая вам покажется приемлемее.
Хочу предупредить что скрипт отлаживался для нод которые установлены в папку /root
Если ваша нода установлена к какую то другую папку — работоспособность скрипта не гарантируется.

Ниже сам скрипт и команды для приведения его в рабочее состояние.
Основной скрипт
(Блок ниже нужно скопировать и вставить сразу весь, в командной строке, не построчно.)

sudo tee $HOME/rebmassa.sh > /dev/null <<EOF
#!/bin/sh
#ver.032
node=\$(sudo journalctl -n 80 -u massad |grep "which may be an attack attempt" )
node1=\$(sudo journalctl -n 80 -u massad |grep "Check the stability of your node" )
node2=\$(sudo journalctl -n 40 -u massad |grep "Failed to send ProtocolPoolEvent due to timeout" )
if [ -z "\$node" ];then
if [ -z "\$node1" ];then
if [ -z "\$node2" ];then
echo "Ok"> /dev/null
else
/usr/bin/sudo systemctl restart massad
echo \`/bin/date +"%b %d %H:%M"\` "(rebmassa) Перегрузили ноду, нашли запись \$node \$node1 \$node2" >> /root/rolls.log
fi
else
/usr/bin/sudo systemctl restart massad
echo \`/bin/date +"%b %d %H:%M"\` "(rebmassa) Перегрузили ноду, нашли запись \$node \$node1 \$node2" >> /root/rolls.log
fi
else
/usr/bin/sudo systemctl restart massad
echo \`/bin/date +"%b %d %H:%M"\` "(rebmassa) Перегрузили ноду, нашли запись \$node \$node1 \$node2" >> /root/rolls.log
fi
EOF

Добавляем задание демону cron на выполнение файла rebmassa.sh каждую минуту
Будем использовать локальный демон. Задание будет находиться в файле rebmassa и располагаться в папке /etc/cron.d/
Файл crontab
(Блок ниже нужно скопировать и вставить сразу весь, в командной строке, не построчно.)
printf "SHELL=/bin/bash
* * * * * root /bin/bash \$HOME/rebmassa.sh > /dev/null 2>&1
" > /etc/cron.d/rebmassa

Файл логов
(Блок ниже нужно скопировать и вставить сразу весь, в командной строке, не построчно.)
sudo tee $HOME/rolls.log > /dev/null <<EOF
Лог файл создан удачно.
EOF

Посмотреть последние 50 строк лога
tail -n50 $HOME/rolls.log
(Это общий файл со скриптом Контроль за падением rolls и автоматическая их покупка поэтому в данном файле могут быть и записи от работы этого скрипта тоже)
Очистить содержимое лога
cat /dev/null > $HOME/rolls.log
Не забывайте что это не панацея, а лишь очередной костыль.
Ну и самое последнее — не нужно писать — «Поставил себе ваш скрипт — нифига он не работает.» Не работает — значит не пользуйтесь.