我有一个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
答案 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