bitcoind的upstart脚本,respawn功能

时间:2014-06-11 12:38:50

标签: linux upstart bitcoind

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

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

问题:如果发生了不好的事情,我如何让upstart(或其他东西)观看比特币并重新启动呢?

实际脚本:

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

4 个答案:

答案 0 :(得分:4)

所以我终于在Ubuntu 14.04服务器上运行了。这是最终的工作/etc/init/bitcoind.conf的样子:

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文件后,请务必执行以下操作:

initctl reload-configuration

基本上这只是猜测和检查,以使这最终成功。这是重要的一点:

expect fork

基本上,这可以告诉我们启动时目标进程分叉的次数。如果你说错了,它会在启动时挂起。请阅读here了解具体内容。

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

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

service bitcoind start

或者停下来,就像这样:

service bitcoind stop

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

ps cax | grep bitcoind

然后,手动终止该过程:

kill -9 PID_OF_BITCOIND

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

ps cax | grep bitcoind

它应该仍然在运行并且使用新的PID。

答案 1 :(得分:2)

oom never

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

oom score never

此外,除关键系统服务外,不要使用oom得分。请尝试-500或-700。这应该比大多数进程具有更高的优先级,但不是对任何正在运行的系统必不可少的进程。所以你应该使用:

oom score -500

第二个问题是你正在使用start-stop-daemon。你应该放弃它,因为Upstart可以处理所有事情。因此生成的脚本将如下所示:

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 :(得分:0)

所以,为了让比特币值得警惕并重新启动它,如果它掉了我用

expect fork

另外,我没有使用start-stop-daemon并只使用exec运行比特币:

exec /path/to/bitcoind

定义正常退出代码(或代码)非常重要

normal exit 0 15

不要忘记你的upstart配置中的 respawn respawn limit 变量。

答案 3 :(得分:0)

现在有官方比特币项目的拉取请求,其中包括a better constructed upstart job