以太坊geth客户端网络同步失败重启脚本和挂掉解决方案
问题说明
以太坊的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节点已经挂掉。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接