2

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

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

问题:如果发生了不好的事情,我怎样才能让暴发户(或其他东西)观看 bitcoind 并重新启动它?

实际脚本:

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

4 回答 4

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

从本质上讲,这告诉新贵在启动时目标进程将被分叉多少次。如果你说错了,它会在启动时挂起。阅读此处了解有关此内容的详细信息。

此外,我安装/运行 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。

于 2014-09-08T19:40:15.643 回答
2
oom never

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

oom score never

此外,除了关键系统服务外,切勿使用 oom score。改为尝试 -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 。

于 2014-06-12T23:35:58.603 回答
0

因此,为了让暴发户监视比特币并在它下跌时重新启动它,我使用

expect fork

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

exec /path/to/bitcoind

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

normal exit 0 15

不要忘记新贵配置中的重生重生限制变量。

于 2014-07-02T12:12:55.920 回答
0

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

于 2014-11-12T13:51:20.063 回答