2

このトピックのスクリプトに基づいて、ビットコイン用の新興スクリプトがあります: https://bitcointalk.org/index.php?topic=25518.0

今後の作業をリスポーンする必要が強くあります。何かが発生した場合、bitcoind は自動的に再起動する必要があります。そのような状況をエミュレートしようとしましたが、upstart はプロセスを再起動しませんでした。

質問: 新興企業 (またはその他のもの) に bitcoin を監視させ、何か悪いことが起こった場合に再起動させるにはどうすればよいですか?

実際のスクリプト:

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

基本的に、これは、起動中にターゲットプロセスが何回フォークされるかをupstartに伝えています。間違えると、起動中にハングアップします。これに関する詳細については、こちらをお読みください。

また、bitcoind をインストール/実行しているユーザーbitcoindroot.

次のように、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 スコアを使用しないでください。代わりに -500 または -700 を試してください。これは、ほとんどのプロセスよりも優先度が高いはずですが、実行中のシステムに不可欠なプロセスではありません。したがって、次を使用する必要があります。

oom score -500

2 番目の問題は、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

現在、公式のビットコイン プロジェクトにプル リクエストがあり、より適切に構築された新興企業の仕事が含まれています。

于 2014-11-12T13:51:20.063 に答える