问题说明

以太坊的geth客户端在运行的过程中经常会出现同步失败或假死的状况。那么针对此状况可编写定时任务脚本来监控geth的日志。并通过日志的输出来确定是否重启geth客户端。

实例

以下根据geth日志中的“Synchronisation failed”日志来进行重启。其他情况的日志可依次进行类推,拓展。

用supervisorctl管理工具,脚本名称为check_eth_node.sh,脚本内容如下:

#!/bin/sh
# 获取最后一行日志
tail_result=`tail -n 1 {日志文件路径}`
FAILPATTERN="Synchronisation failed"
if [ $? -ne 0 ]
then
    echo "tail command error!" $?
else
    if [[ $tail_result == *$FAILPATTERN* ]]
    then
        echo "Get 'Synchronisation failed' logs , to restart geth now!"
        /usr/local/bin/supervisorctl restart geth
        if [ $? -ne 0 ]
        then
        echo "restart error." $?
        fi
    fi
fi
echo "excute time:" `date`

通过linux下的定时器模块crontab来实现定时功能:

0 0-23 * * * check_eth_node.sh >> cronlog.log

这样就可以每隔一段时间来进行geth节点的监控了。

程序监控

另外一种监控形式,就是用其他语言比如java写一个定时任务,通过定时任务去调用一个简单的api,比如调用查询当前区块的高度的api,这样如果调用失败,说明geth节点已经挂掉。



以太坊geth客户端网络同步失败重启脚本和挂掉解决方案插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2019/10/05/%e4%bb%a5%e5%a4%aa%e5%9d%8ageth%e5%ae%a2%e6%88%b7%e7%ab%af%e7%bd%91%e7%bb%9c%e5%90%8c%e6%ad%a5%e5%a4%b1%e8%b4%a5%e9%87%8d%e5%90%af%e8%84%9a%e6%9c%ac%e5%92%8c%e6%8c%82%e6%8e%89%e8%a7%a3%e5%86%b3/