问题说明

以太坊的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节点已经挂掉。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注