Ich möchte Bitcoin-Blockdaten nehmen und senden, um zu vermeiden, dass ich den Blockchain-Download auf anderen Computern in meinem lokalen Netzwerk erneut durchlaufen muss. Um sicherzustellen, dass keine DB-Korruption auftritt, stoppe ich Bitcoin vor der Übertragung. Das Ausführen des Unix-Befehls bitcoind stop
wird zurückkehren
Bitcoin has stopped running!
Ich bemerke, dass es nach Erhalt dieser Nachricht noch einige Augenblicke lang oben läuft. Dies ist kein Problem, da es nie länger als 15 Sekunden dauert, aber ich möchte diesen Vorgang mit einem einfachen PHP-Skript automatisieren.
Die Verwendung des bitcoin-rpc-Befehls wie z. B. $status = $bitcoin->stop()
würde zu einem Ergebnis von „Bitcoin läuft nicht mehr“ führen, aber es kann immer noch oben laufen.
Wie stelle ich sicher, dass Bitcoin wirklich aufgehört hat zu laufen? Oder ist es sicher, die Datenübertragung durchzuführen, sobald ich diese Nachricht erhalte (schreibt Bitcoin weiter an db, nachdem es Sie darüber informiert hat, dass es gestoppt wurde)?
Unter Linux:
ps aux | grep bitcoind
Oder auch:
watch ps aux | grep bitcoind
Aber um Ihre Frage etwas anders zu beantworten, würde ich vorschlagen, vorhandene Bitcoins am Laufen zu halten. Dann fügt Ihr neuer Knoten eine Connect-Anweisung mit der lokalen IP des alten Knotens in der Datei bitcoin.conf hinzu (normalerweise in $HOME/.bitcoin/).
Ihr neuer Knoten verbindet sich dann ausschließlich mit dem vorhandenen Knoten und lädt über Ihr lokales Netzwerk alle Blöcke vom vorhandenen Knoten herunter.
Auch wenn beide PCs immobil sind, können Sie es so belassen, um doppelte Downloads aus dem Internet zu vermeiden. Eine Alternative, wenn der zweite beispielsweise ein Laptop ist, besteht darin, stattdessen -addnode zu verwenden. Von hier :
-addnode=<ip> Add a node to connect to and attempt to keep the connection open
-connect=<ip> Connect only to the specified node(s)
-dns Allow DNS lookups for -addnode, -seednode and -connect (default: 1)
Mathias711
top
ein paar Sekunden lang läuft, liegt wahrscheinlich daran, dass die Datenbank fertiggestellt, der gesamte Speicher freigegeben und so weiter ist. Ich denke, Sie setzen besser einsleep(15)
(oder 30, um der Sicherheit willen), als darum herum zu programmieren und jede Millisekunde zählen zu lassen.Markieren
Mathias711
Markieren