Bitcoind

如何在 Linux 上一段時間後定期重啟 bitcoind

  • March 11, 2022

如果像我一樣,您希望在一段時間後自動重新啟動 bitcoind,或者如果它至少崩潰了,它會在某個時間自行重新啟動,您知道在 Linux 上可能需要很長時間才能完成程序記憶體寫入磁碟然後您可以在沒有可怕消息的情況下重新啟動Error: Cannot obtain a lock on data directory /media/drive2/.bitcoin/. Bitcoin Core is probably already running.

如何使用腳本自動重啟bitcoind而沒有錯誤消息和啟動失敗?

這個問題專門允許bitcoind乾淨地退出,因為即使您看不到該程序,ps -ae | grep bitcoind您仍然可以看到它,htop直到它完成將程序記憶體送出到磁碟並最終“關閉:完成” ,它可能需要過多的時間才能乾淨地退出" 被寫入磁碟。如果配置為守護程序,則在程序最終存在之前可能會出現數千次失敗。

bitcoind程序在您執行時幾乎立即退出,bitcoind-cli stop因此您不能簡單地檢測該bitcoind程序。即使您在執行後bitcoind可以看到它,但您無法看到它,因為它已經退出。htop``bitcoin-cli stop``ps

答案是找到一種可靠地等待程序記憶體完成寫入磁碟的方法。bitcoind很好地寫入調試日誌並將以下消息作為它發送到磁碟的最後一件事,Shutdown: done因此可以檢測到這種方式。

以下腳本可在MIT 許可證上的GitHub上獲得,並在獲得附加許可證的許可後在此處重新發布。

我希望它對你有用。

#!/bin/bash
# Exit and restart bitcoind after some time period
# Willtech ©2022

# How often to restart in seconds
timeout=3600

# BAT / CMD goto function
# Source: https://www.codegrepper.com/code-examples/shell/bash+jump+to
function goto
{
   label=$1
   cmd=$(sed -n "/^:[[:blank:]][[:blank:]]*${label}/{:a;n;p;ba};" $0 | 
         grep -v ':$')
   eval "$cmd"
   exit
}
# Just for the heck of it: how to create a variable where to jump to:
start=${1:-"start"}
goto "$start"

: start

#Start bitcoind
bitcoind -daemon

#Run until timout
sleep $timeout

#Stop bitcoind
bitcoin-cli stop

#Tries for ten minutes to see if exit is detected.
until timeout 600s tail -f /media/drive2/.bitcoin/debug.log | grep -m 1 "Shutdown: done"
 do
   sleep 2
 done

#Log again
echo again

#Loop to : start
goto "start"

echo bar

有趣的是,過去使用 1TB USB3 碟片進行初始同步可能需要一個月的時間,即使交換大於 100GB,但現在每隔一小時重新啟動大約需要三天,直到它是最新的。那是在空白磁碟上的塊下載模式下,以便將數據寫入到找到它的位置附近。

引用自:https://bitcoin.stackexchange.com/questions/112620