首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bitcoind的Upstart脚本,恢复功能

bitcoind的Upstart脚本,恢复功能
EN

Stack Overflow用户
提问于 2014-06-11 12:38:49
回答 3查看 1.5K关注 0票数 2

我为bitcoind提供了一个upstart脚本,它基于本主题中的脚本:https://bitcointalk.org/index.php?topic=25518.0

我强烈需要重生未来的工作:如果发生了什么事,比特币应该自动重新启动。我试着模仿这种情况,但暴发户并没有重新启动这个过程。

问题:如果发生了一些不好的事情,我如何使新启动(或其他什么)观看和重新启动它?

实际脚本:

代码语言:javascript
运行
复制
description "bitcoind"

start on filesystem
stop on runlevel [!2345]
oom never
expect daemon
respawn
respawn limit 10 60 # 10 times in 60 seconds

script
user=root
home=/root/.bitcoin/
cmd=/usr/bin/bitcoind
pidfile=$home/bitcoind.pid
# Don't change anything below here unless you know what you're doing
[[ -e $pidfile && ! -d "/proc/$(cat $pidfile)" ]] && rm $pidfile
[[ -e $pidfile && "$(cat /proc/$(cat $pidfile)/cmdline)" != $cmd* ]] && rm $pidfile
exec start-stop-daemon --start -c $user --chdir $home --pidfile $pidfile --startas $cmd -b -m
end script
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-12 23:35:58

代码语言:javascript
运行
复制
oom never

是你的第一个问题。你需要这个:

代码语言:javascript
运行
复制
oom score never

此外,除了关键系统服务之外,不要使用oom评分。试试-500或-700。与大多数进程相比,这应该是一个更高的优先级,但对于任何运行中的系统来说,这都是不可缺少的。所以你应该用:

代码语言:javascript
运行
复制
oom score -500

第二个问题是,您使用的是启动停止守护进程。你应该抛弃它,因为Upstart可以处理所有的事情。因此,生成的脚本如下所示:

代码语言:javascript
运行
复制
description "bitcoind"

start on filesystem
stop on runlevel [!2345]

oom score -500
chdir /root/.bitcoin

respawn
respawn limit 10 60 # 10 times in 60 seconds

exec /usr/bin/bitcoind

最后一个问题可能是您没有正确定义normal exit。您需要指定哪些返回代码和信号构成正常退出,以便Upstart知道如果信号和返回代码不匹配,就会重新出现。请参阅Upstart关于如何实现此操作的食谱:http://upstart.ubuntu.com/cookbook/#normal-exit

票数 2
EN

Stack Overflow用户

发布于 2014-09-08 19:40:15

所以我终于在Ubuntu14.04服务器上完成了工作。下面是最后一个工作的/etc/init/bitcoind.conf是什么样子的:

代码语言:javascript
运行
复制
description "bitcoind"

start on filesystem
stop on runlevel [!2345]
oom score -500
expect fork
respawn
respawn limit 10 60 # 10 times in 60 seconds

script
    user=bitcoind
    home=/home/$user
    cmd=$home/bin/bitcoind
    pidfile=$home/bitcoind.pid
    # Don't change anything below here unless you know what you're doing
    [[ -e $pidfile && ! -d "/proc/$(cat $pidfile)" ]] && rm $pidfile
    [[ -e $pidfile && "$(cat /proc/$(cat $pidfile)/cmdline)" != $cmd* ]] && rm $pidfile
    exec start-stop-daemon --start -c $user --chdir $home --pidfile $pidfile -m --startas $cmd
end script

添加/更新/etc/init/bitcoin.conf文件后,请确保运行以下命令:

代码语言:javascript
运行
复制
initctl reload-configuration

基本上,这只是大量的猜测和检查,以使这最后的工作。以下是最重要的一点:

代码语言:javascript
运行
复制
expect fork

本质上,这是告诉新启动者在启动时目标进程将分叉多少次。如果你说错了,它就会在开始时挂起来。有关这方面的细节,请阅读这里

另外,安装/运行bitcoind的用户是bitcoind,而不是root

您应该能够作为服务手动启动bitcoind,如下所示:

代码语言:javascript
运行
复制
service bitcoind start

或者阻止它,像这样:

代码语言:javascript
运行
复制
service bitcoind stop

如果重新启动服务器,应自动启动bitcoind服务。而且,如果bitcoind进程被终止或崩溃,它将被自动恢复。您可以通过首先找到bitcoind进程的PID来在服务器上测试该部分:

代码语言:javascript
运行
复制
ps cax | grep bitcoind

然后,手动终止该过程:

代码语言:javascript
运行
复制
kill -9 PID_OF_BITCOIND

然后,再次尝试获取bitcoind进程的PID:

代码语言:javascript
运行
复制
ps cax | grep bitcoind

它应该仍然在运行,并有一个新的PID。

票数 4
EN

Stack Overflow用户

发布于 2014-11-12 13:51:20

现在有一个关于官方比特币项目的拉请求,其中包括建设得更好的新贵工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24163172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档