BHD钱包部署【生态池/合作池】
前序
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钱包部署【生态池/合作池】的更多相关文章
- Citrix 服务器虚拟化之十八 桌面虚拟化之部署MCS随机桌面池
Citrix 服务器虚拟化之十八 桌面虚拟化之部署MCS随机桌面池 完成桌面模版的制作后,可以开始虚拟桌面池的发布 说明: 环境基于实验十七 1.登录DC服务器创建一个组织单位名为Citrix,然后 ...
- concurrent.futures模块(进程池/线程池)
需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...
- Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)
Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...
- python并发编程-进程池线程池-协程-I/O模型-04
目录 进程池线程池的使用***** 进程池/线程池的创建和提交回调 验证复用池子里的线程或进程 异步回调机制 通过闭包给回调函数添加额外参数(扩展) 协程*** 概念回顾(协程这里再理一下) 如何实现 ...
- android线程与线程池-----线程池(二)《android开发艺术与探索》
android 中的线程池 线程池的优点: 1 重用线程池中的线程,避免了线程的创建和销毁带来的性能开销 2 能有效的控制最大并发数,避免大量线程之间因为喜欢抢资源而导致阻塞 3 能够对线程进行简单的 ...
- Python并发编程之线程池&进程池
引用 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,但是当项目达到一定的规模,频繁创建/销毁进程或者线程是非常消耗资源的,这个时候我 ...
- (转)websphere线程池 连接池设置
原文:http://www.talkwithtrend.com/Article/207511 池(Pool)是WebSphere中最常涉及的概念之一.从网络.Web 服务器.Web 容器.EJB 容器 ...
- Python-GIL 进程池 线程池
5.GIL vs 互斥锁(*****) 1.什么是GIL(Global Interpreter Lock) GIL是全局解释器锁,是加到解释器身上的,保护的就是解释器级别的数据 (比如垃圾回收的数据) ...
- 并发编程---线程queue---进程池线程池---异部调用(回调机制)
线程 队列:先进先出 堆栈:后进先出 优先级:数字越小优先级越大,越先输出 import queue q = queue.Queue(3) # 先进先出-->队列 q.put('first') ...
随机推荐
- Fastjson 序列化与反序列化
JSON这个类是fastjson API的入口,主要的功能都通过这个类提供. 序列化API // 将Java对象序列化为JSON字符串,支持各种各种Java基本类型和JavaBean public s ...
- CRC校验的问题(c语言实现CRC校验和)
1. 前面的数 7A 01 00,计算的结果是0X4920 2. 那么把数据CRC加上 3. 测试代码,计算出来的结果对不上,什么情况?可是我把参考模型的全部都选了一遍,也对不上其中一个!!! 4. ...
- Java基础教程:Java内存区域
Java基础教程:Java内存区域 运行时数据区域 Java虚拟机在执行Java程序的过程种会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟 ...
- Charles 抓包配置
本文参考:charles 抓包配置 proxy setting (代理设置) 设置的主界面如下: 动态端口 启用动态端口选项来监听动态端口,每次查询启动时选择.这样可以避免与计算机上可能运行的其他网络 ...
- vs2015.无法运行rc.exe
1.参考文章:无法运行“rc.exe” - wb175208的专栏 - CSDN博客.html(https://blog.csdn.net/wb175208/article/details/83546 ...
- 对象的加减乘除运算demo
1 class Square: 2 def __init__(self, wh): #因为是正方形, 只取一条边的长度 3 if isinstance(wh,(int,float)): 4 self. ...
- jquery设置滚动条样式
HTML结构 下面是该滚动条插件工作所必须的HTML结构: <div id="about" class="nano"> <div cl ...
- Anaconda是什么?Anconda下载安装教程(1)
一.如果从事Python开发,配置环境需要安装两个包: 第一个安装开发工具,俗称IDE : 推荐使用 Pycharm 第二个安装开发工具包: Anaconda ps:Windows 下 Pycharm ...
- Quartz.Net—IJob特性
IJob默认情况下是无状态的,和其他系统没有关系 特别是job里面的jobdata每次都是新的.可以无限扩展. PersistJobDataAfterExecution JobData持久化 Job ...
- Asp.Net Core中创建多DbContext并迁移到数据库
在我们的项目中我们有时候需要在我们的项目中创建DbContext,而且这些DbContext之间有明显的界限,比如系统中两个DbContext一个是和整个数据库的权限相关的内容而另外一个DbConte ...