Die Installationsanweisungen für Ubuntu schlagen vor, geth
von der Befehlszeile aus zu starten. Wie kann ich es als Daemon-Prozess / Dienst unter Ubuntu 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 .
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 .
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 .
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
killall geth
scheint eine bessere Option zu sein, um den Geth-Prozess zu stoppen.killall geth
funktioniert nicht mitnohup
kill -9 $(pgrep -f -l geth | awk '{print $1}')
killall geth
. Sie müssen nur ein paar Minuten warten, bis es ordnungsgemäß geschlossen wirdHier ist ein Update für die Antwort von 5chdn, die systemd
. Dies zeigt, wie Sie einen Headless geth
auf 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.
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
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, geth
wird eine Warnung ausgegeben.
systemctl --user enable /root/geth.service
systemctl --user start geth.service
Dadurch wird es jetzt und nach dem Neustart ausgeführt.
sleep 5 # The geth server takes a few seconds to boot up
geth attach
Wenn geth attach
dies erfolgreich ist, wissen Sie, dass der geth
Server 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:
#!/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"'
chmod +x geth-testnet chkconfig --add geth-testnet chkconfig --level 345 geth-testnet ein
hcvst
Taylor Gerring
q9f
Taylor Gerring
e18r
Carlolm
sudo systemctl --user enable /home/ubuntu/geth.service
2) musste den Befehl auch in einen absoluten Pfad im Dienst ändern:ExecStart=/usr/bin/geth ...
Alper
Herzog
2>>
statt2>
?Ruben Thomas
ExecStart
Leitung 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.Mohammed Saberi