Wie kann ich go-ethereum als Daemon-Prozess auf Ubuntu ausführen?

Die Installationsanweisungen für Ubuntu schlagen vor, gethvon der Befehlszeile aus zu starten. Wie kann ich es als Daemon-Prozess / Dienst unter Ubuntu ausführen?

Antworten (5)

Als systemd-Dienst ausführen

Erstellen Sie eine Datei geth.service:

[Unit]
Description=Ethereum go client

[Service]
Type=simple
ExecStart=geth 2>%h/.ethereum/geth.log

[Install]
WantedBy=default.target

Dienst aktivieren:

systemctl --user enable geth.service
systemctl --user start geth.service

Quelle .

Alternativ können Sie screen verwenden:

sudo apt-get update && sudo apt-get install screen -y

Dann können Sie eine ähnliche Bash machen ( ~/geth.sh):

#!/usr/bin/env bash
echo "Starting geth"
screen -dmS geth /usr/bin/geth --verbosity 3

Jetzt machen wir es ausführbar:

sudo chmod +x ~/geth.sh

Sie können jetzt die Bash ausführen~/geth.sh

Sie hängen mit screen -x geth an den Bildschirm an

Sie lösen sich vom Bildschirm, indem Sie STRG + a und dann d drücken

Wenn Sie eine Verbindung zur Geth-Konsole herstellen möchten, nachdem der Prozess im Hintergrund (oder auf dem Bildschirm) ausgeführt wurde, können Sie Folgendes verwenden:

geth attach

Quelle .

Oder verzweigen Sie es einfach im Hintergrund:

Wenn der Start geht, setze ein &am Ende des Befehls in ein Terminal:

geth --rpc &

Bevor Sie das Terminal schließen, sollten Sie den Vorgang ablehnen:

disown

Sie können die Protokolle auch in eine Datei wie diese weiterleiten:

geth --verbosity 4 --rpc 2>> /path/to/logfile

Aber vergessen Sie nicht, es abzulehnen, bevor Sie das Terminal schließen.

Quelle .

Gute Antwort. Das "systemd" sollte jedoch wahrscheinlich das erste Beispiel sein - zumindest hätte ich erwartet, es als Top-Antwort zu finden.
Sie haben meine Stimme, stimmen aber zu, dass der systemd-Abschnitt wahrscheinlich der relevanteste Teil der Antwort ist.
die Antwort aktualisiert
Super, das ist eine ausgezeichnete Antwort!
Systemd-Methode: Einheit konnte nicht aktiviert werden: Datei geth.service: Keine solche Datei oder kein solches Verzeichnis. Ich speichere die Datei in meinem Home-Ordner und führe dort den Befehl aus.
@emisilva Ich hatte ein ähnliches Problem, das ich gelöst habe, indem ich Folgendes geändert habe: 1) den enable-Befehl in sudo geändert und den Pfad zu einem absoluten Pfad gemacht: sudo systemctl --user enable /home/ubuntu/geth.service2) musste den Befehl auch in einen absoluten Pfad im Dienst ändern:ExecStart=/usr/bin/geth ...
Warum müssen wir uns verleugnen? @5chdn
Möchten Sie nicht an das Protokoll in der Servicedatei anhängen? 2>>statt 2>?
Die ExecStartLeitung funktioniert bei mir nicht. Laut der systemd-Dokumentation "speziell Umleitung mit "<", "<<", ">" und ">>", Pipes mit "|", Ausführen von Programmen im Hintergrund mit "&" und anderen Elementen von Shell-Syntax werden nicht unterstützt." Ich finde auch, im Gegensatz zur systemd-Dokumentation, dass ein absoluter Pfad zur Binärdatei benötigt wird.
Wie kann man Geth mit seinen Flags im Daemon-Modus mit Ihrer Lösung ausführen?

Nur mit diesem Befehl ist genug für mich:

nohup geth --rpc &

So überprüfen Sie, ob der Dienst ausgeführt wird:

ps ax | grep geth

So durchsuchen Sie die letzten Protokollmeldungen:

tail -f nohup.out

Um den von mir verwendeten Dienst zu stoppen:

pkill geth
Um eine Konsole zu erhalten, müssen Sie sich anhängen
killall gethscheint eine bessere Option zu sein, um den Geth-Prozess zu stoppen.
genau das brauche ich!
@alper killall gethfunktioniert nicht mitnohup
@e18r Versuch:kill -9 $(pgrep -f -l geth | awk '{print $1}')
@alper funktioniert tatsächlich killall geth. Sie müssen nur ein paar Minuten warten, bis es ordnungsgemäß geschlossen wird

Hier ist ein Update für die Antwort von 5chdn, die systemd. Dies zeigt, wie Sie einen Headless gethauf Ihrem Ubuntu-Server ausführen.

Natürlich müssen Sie zuerst die Kommandozeilen-Tools installieren, siehe https://www.ethereum.org/cli . Sie sollten MyEtherWallet auch auf Ihrem normalen Desktop-Computer ausführen, um ein Konto und einen privaten Schlüssel zu erstellen, damit Sie Geld erhalten können.

Schritt 1: Ziehen Sie Ihren Umhang an

sudo bash

Andere Schritte hier basieren darauf, dass Sie als Root ausgeführt werden. Wenn Sie nicht als Root ausgeführt werden, lernen Sie die Verwendung von systemd mit Benutzerprozessen kennen . tl; dr In diesem Fall würden sie nur ausgeführt, nachdem Sie sich angemeldet haben, aber Sie können konfigurieren, dass ein Benutzerdienst als Boot gestartet wird

Schritt 2: Machen Sie einen Dienst

cat > /root/geth.service <<EOF
[Unit]
Description=Ethereum go client

[Service]
Type=simple
ExecStart=/usr/bin/geth --etherbase 0xe677698ab732Aa1E56CF2A7997a00e3FA6F5bD88 2>%h/.ethereum/geth.log

[Install]
WantedBy=default.target
EOF

Oben können Sie die Etherbase Ihrer eigenen Brieftasche ersetzen. Wenn Sie keine Etherbase angeben, gethwird eine Warnung ausgegeben.

Schritt 3: Führen Sie es aus

systemctl --user enable /root/geth.service
systemctl --user start geth.service

Dadurch wird es jetzt und nach dem Neustart ausgeführt.

Schritt 4: Testen Sie es

sleep 5 # The geth server takes a few seconds to boot up
geth attach

Wenn geth attachdies erfolgreich ist, wissen Sie, dass der gethServer ausgeführt wird, und Sie sehen Folgendes:

Willkommen bei der JavaScript-Konsole von Geth!

Wenn etwas schief gelaufen ist, sehen Sie:

Schwerwiegend: Verbinden mit Remote-Geth nicht möglich: Wählen Sie Unix /root/.ethereum/geth.ipc: Verbinden: Verbindung abgelehnt

Der beste Weg ist, als systemd auszuführen:

Erstellen Sie eine geth.service-Datei (/etc/systemd/system/geth.service):

sudo nano /etc/systemd/system/geth.service

Fügen Sie das Folgende ein

[Unit]
Description=Geth

[Service]
Type=simple
User={$USER}
Restart=always
RestartSec=12
ExecStart=/bin/geth --syncmode "full" --rpc --rpcaddr "0.0.0.0"

[Install]
WantedBy=default.target

Ersetzen Sie {$USER} durch den Benutzernamen oben. Verwenden Sie useradd , um bei Bedarf einen neuen Benutzer zu erstellen.

sudo useradd -d /home/newUser -m --uid 10000 newUser

Aktivieren und starten Sie den Dienst:

sudo systemctl daemon-reload
sudo systemctl enable geth.service
sudo systemctl daemon-reload

service geth status
sudo service geth start

Überprüfen Sie den Status:

service geth status

Anhängen an eine Geth-Instanz:

geth attach

Beenden und deaktivieren Sie den Dienst:

sudo service geth stop
sudo systemctl disable geth.service
sudo systemctl daemon-reload

Obwohl die akzeptierte Antwort großartig ist, hat sie bei mir nicht funktioniert. Höchstwahrscheinlich, weil ich auf AWS Linux AMI bin (pfui, ich weiß). Ich beabsichtige, irgendwann zu wechseln (systemctl nicht. Bisher scheint dies bei mir funktioniert zu haben:

  1. Erstellen Sie die Datei /etc/init.d/geth-testnet
#!/bin/bash
#chkconfig: 2345 20 80
#description RPC-Testnetz starten

su ec2-user -c '/path/to/geth --verbosity 3 --testnet --rpc --rpcaddr="0.0.0.0" --rpccorsdomain="*" --rpcapi="db,eth,net, web3,persönlich"'

  1. Laufen
chmod +x geth-testnet
chkconfig --add geth-testnet
chkconfig --level 345 geth-testnet ein
Ich kann mich irren, aber ist dieser Teil des obigen Befehls: '--rpc --rpcaddr="0.0.0.0" --rpccorsdomain="*" ' Geth-Ports für mögliche Angriffe öffnen? Ich erinnere mich an ein Posting vor fünf oder sechs Monaten über jemanden, der Äther verliert, wenn er Geth mit Ports betreibt, die für die ganze Welt offen sind, wie dies sagt. Könnte aber falsch sein. Ich bin sicher, jemand wird mich korrigieren, wenn ich es bin.
Aus Sicherheitsgründen entfernt vielleicht jeder, der dies findet, diesen Teil, bis jemand bestätigt oder bestreitet, was @ThomasJayRush gesagt hat