前序

BHD网址:https://btchd.org/#wallet

注:我这里是centos7, 所以我选linuxPC

部署

解压与配置

tar -zxf bhd-v1.3.4.0-d909c0e-x86_64-linux-gnu.tar.gz

注: 大概就长这个样子, 生态池和合作池是一样的, 端口不同而已。

启动之前记得把data目录替换(如果有原数据的话), 添加配置文件btchd.conf

启动

/opt/bhd-wallet/bin/btchdd -datadir=/opt/bhd-wallet/data/

直接nohup也行, supervisord也行, 下面扔个supervisord维护的配置过来

[program:btchdd_co]
user=root
directory=/opt/bhd-wallet/
environment=LD_LIBRARY_PATH="/opt/bhd-wallet/lib"
command=/opt/bhd-wallet/bin/btchdd -datadir=/opt/bhd-wallet/data/
numprocs=1
startsecs=3
startretries=3
autostart=true
autorestart=true
process_name=%(program_name)s

就这样的启动成功了

验证

1.查看区块

https://btchd.org/explorer/block

对比与自己钱包的块值

/opt/bhd-wallet/btchd-cli.sh getMiningInfo

对比线上最新的+1

下面还有两条出数据代表正常

/opt/bhd-wallet/btchd-cli.sh getblockchaininfo
/opt/bhd-wallet/btchd-cli.sh listsignaddresses

告警shell

注:发现钱包掉线马上告警, 主要使用的是getMininfo去获取每个字段中的值, 然后判断非空, 如果有空, 证明钱包挂了, 这是异常情况, 告警。当告警完之后, 获取到数据代表正常,

这个时候再发一条恢复告警提示管理员或者开发人员, 当无挂掉得时候正常显示, 可以使用nohup指定重定向日志。

#*************************************************************************
# > File Name: btchddProcess.sh
# > Author: chenglee
# > Main : chengkenlee@sina.com
# > Blog : http://www.cnblogs.com/chenglee/
# > Created Time : 2019年08月22日 星期一 14时28分49秒
#*************************************************************************
#!/bin/bash hostname=`hostname`
NetWorkIP=`ip addr |grep inet |grep -v inet6 |grep eth0|awk '{print $2}' |awk -F "/" '{print $1}'` BtchddProcess="btchdd_co"
count=0
#online
webhook="这里填写你的钉钉机器人告警url"
#test function BTCHDDERROR(){
currTime1=`echo $(date +"%Y-%m-%d.%T")`
currchengtime=`echo $(date +"%Y-%m-%d %T")`
SsPid="$$"
curl ''$webhook'' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text",
"text": {
"content": "
服务器:'$hostname' 发生: '$BtchddProcess'活性故障! [
告警主机:'$hostname'
告警地址:'$NetWorkIP'
监控项目:'$BtchddProcess'
告警等级:高
当前状态:中断
告警信息:'$BtchddProcess' is down
告警时间:'$currTime1'
事件ID:'$SsPid'
]
"
}
}'
}
function BTCHDDRESTART(){
currTime2=`echo $(date +"%Y-%m-%d.%T")`
currchengtime2=`echo $(date +"%Y-%m-%d %T")`
SsPid="$$"
continueTime=$(($(date +%s -d "$currchengtime2") - $(date +%s -d "$currchengtime")));
curl ''$webhook'' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text",
"text": {
"content": "
服务器:'$hostname' 发生: 进程'$BtchddProcess'活性恢复! [
告警主机:'$hostname'
告警地址:'$NetWorkIP'
监控项目:'$BtchddProcess'
告警等级:中
当前状态:运行
告警信息:'$processname' restart success
告警时间:'$currTime1'
恢复时间:'$currTime2'
持续时间:'$continueTime' s
事件ID:'$SsPid'
]
"
}
}'
} :<<cheng
function BTCHDDRESTARTOFF(){
curl ''$webhook'' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text",
"text": {
"content": "高级告警:[主机:'$hostname' - 进程:'$BtchddProcess' - 操作:活性检测异常 - 状态:重启失败]"
}
}'
}
cheng function BTCHDDSUCC(){
curl ''$webhook'' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text",
"text": {
"content": "高级告警:[主机:'$hostname' - 进程:'$BtchddProcess' - 操作:活性检测异常 - 状态:恢复]"
}
}'
} function btstatus(){
#curl -v -X POST 'http://127.0.0.1:8732/burst?requestType=getMiningInfo' > status
curl -X POST 'http://localhost:8911/burst?requestType=getMiningInfo' > status
sleep 2;
Height=`cat status | awk -F ',' '{print$1}' | awk -F ':' '{print$2}'`
GenerationSignature=`cat status | awk -F ',' '{print$2}' | awk -F ':' '{print$2}' | awk -F '"' '{print$2}'`
BaseTarget=`cat status | awk -F ',' '{print$3}' | awk -F ':' '{print$2}' | awk -F '"' '{print$2}'`
TargetDeadline=`cat status | awk -F ',' '{print$4}' | awk -F ':' '{print$2}'`
RequestProcessingTime=`cat status | awk -F ',' '{print$5}' | sed 's/}//' | awk -F ':' '{print$2}'`
}
function SKill(){
Pid=`ps aux | grep "btchdd" | grep -v grep | wc -l`
if [ $Pid > 0 ];then
ps aux | grep "btchdd" | grep -v grep | awk -F ' ' '{print$2}' | xargs kill -9
BTCHDDRESTART
if [ -z "$Height" -o -z "$GenerationSignature" -o -z "$BaseTarget" -o -z "$TargetDeadline" -o -z "$RequestProcessingTime" ];then
echo;
else
BTCHDDSUCC
fi
fi
}
function check(){
btstatus
if [ -z "$Height" -o -z "$GenerationSignature" -o -z "$BaseTarget" -o -z "$TargetDeadline" -o -z "$RequestProcessingTime" ];then
BTCHDDERROR
sleep 5;
count=$[count+1]
echo "[suspend:$count]"
echo "#####1:[$Height],2:[$GenerationSignature],3:[$BaseTarget],4:[$TargetDeadline],5:[$RequestProcessingTime]####"
else
echo "Success"
echo "#####1:[$Height],2:[$GenerationSignature],3:[$BaseTarget],4:[$TargetDeadline],5:[$RequestProcessingTime]####"
sleep 1; if [ $count -gt 0 ];then
BTCHDDRESTART
count=0
echo "[suspend:$count]"
fi
fi
}
function main(){
while :
do
currTime=$(date +"%Y-%m-%d %T")
echo $currTime
check
echo;
sleep 60;
done
}
main

因为配置了supervisord自动拉起, 所以每次中断的时候就会自动重启。

BHD钱包部署【生态池/合作池】的更多相关文章

  1. Citrix 服务器虚拟化之十八 桌面虚拟化之部署MCS随机桌面池

    Citrix 服务器虚拟化之十八  桌面虚拟化之部署MCS随机桌面池 完成桌面模版的制作后,可以开始虚拟桌面池的发布 说明: 环境基于实验十七 1.登录DC服务器创建一个组织单位名为Citrix,然后 ...

  2. concurrent.futures模块(进程池/线程池)

    需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...

  3. Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)

    Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...

  4. python并发编程-进程池线程池-协程-I/O模型-04

    目录 进程池线程池的使用***** 进程池/线程池的创建和提交回调 验证复用池子里的线程或进程 异步回调机制 通过闭包给回调函数添加额外参数(扩展) 协程*** 概念回顾(协程这里再理一下) 如何实现 ...

  5. android线程与线程池-----线程池(二)《android开发艺术与探索》

    android 中的线程池 线程池的优点: 1 重用线程池中的线程,避免了线程的创建和销毁带来的性能开销 2 能有效的控制最大并发数,避免大量线程之间因为喜欢抢资源而导致阻塞 3 能够对线程进行简单的 ...

  6. Python并发编程之线程池&进程池

    引用 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,但是当项目达到一定的规模,频繁创建/销毁进程或者线程是非常消耗资源的,这个时候我 ...

  7. (转)websphere线程池 连接池设置

    原文:http://www.talkwithtrend.com/Article/207511 池(Pool)是WebSphere中最常涉及的概念之一.从网络.Web 服务器.Web 容器.EJB 容器 ...

  8. Python-GIL 进程池 线程池

    5.GIL vs 互斥锁(*****) 1.什么是GIL(Global Interpreter Lock) GIL是全局解释器锁,是加到解释器身上的,保护的就是解释器级别的数据 (比如垃圾回收的数据) ...

  9. 并发编程---线程queue---进程池线程池---异部调用(回调机制)

    线程 队列:先进先出 堆栈:后进先出 优先级:数字越小优先级越大,越先输出 import queue q = queue.Queue(3) # 先进先出-->队列 q.put('first') ...

随机推荐

  1. Information:java: Multiple encodings set for module chunk platf "GBK" will be used by compile

    转自:https://blog.csdn.net/xiaobing_122613/article/details/81866445 Intellij IDEA 在引入代码后,出现编译错误. Infor ...

  2. python 抓取数据 存入 excel

    import requestsimport datetimefrom random import choicefrom time import timefrom openpyxl import loa ...

  3. 【插件式框架探索系列】应用程序域(AppDomain)

    应用程序域(AppDomain)已经不是一个新名词了,只要熟悉.net的都知道它的存在,不过我们还是先一起来重新认识下应用程序域吧,究竟它是何方神圣. 应用程序域 众所周知,进程是代码执行和资源分配的 ...

  4. wpf日期控件

    /// <summary> /// Value converter to convert a datetime object to the specified string format. ...

  5. Qt编写自定义控件62-探探雷达

    一.前言 随着移动互联网的盛行,现在手机APP大行其道,每个人的手机没有十几个APP都不好意思说自己是现代人,各种聊天.购物.直播.小视频等APP,有个陌生人社交的APP叫探探,本人用过几次,当然不是 ...

  6. ABAP DEMO so批量导入

    *&---------------------------------------------------------------------* *& Report YDEMO_015 ...

  7. LeetCode_299. Bulls and Cows

    299. Bulls and Cows Easy You are playing the following Bulls and Cows game with your friend: You wri ...

  8. Python第一阶段02

    1.模块: import sys print(sys.path) # 打印环境变量 print(sys.argv) # 打印当前文件绝对路径 # print(sys.argv[]) import os ...

  9. PNG压缩工具-PNGGauntlet

    PNGGauntlet下载地址 对于前端来说非常实用的PNG压缩软件,支持拖拽,就是软件速度比较慢.

  10. Vue简单基础 + 实例 及 组件通信

    vue的双向绑定原理:Object.defineProperty() vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫 ...