Gibt es ein Start-/Stopp-Shell-Skript für Geth, das nach dem Start von Debian oder Ubuntu OS ausgeführt wird?
Beispielsweise befinden sich Startskripts normalerweise unter
/etc/init.d/ /etc/rc.local
Ich werde nicht in eine system.d vs. sysvinit-Debatte einsteigen, aber hier ist, wie Sie es mit dem Standard-Init-Manager machen könnten, mit dem Debian / Ubuntu ausgeliefert wird.
Erstellen Sie eine Datei /etc/systemd/system/geth@.service
und füllen Sie sie damit:
[Unit]
Description=geth Ethereum daemon
Requires=network.target
[Service]
Type=forking
User=%I
ExecStart=/home/USERNAME/go-ethereum/build/bin/geth
Restart=on-failure
[Install]
WantedBy=multi-user.target
Wechsle /home/USERNAME/go-ethereum/build/bin/geth
dorthin, wo dein Get ist :)
Wenn Sie mit der Datei fertig sind, aktivieren Sie den Dienstsudo systemctl enable geth@USERNAME.service
Dann kann Ihr Benutzer es mit startensudo systemctl start geth@USERNAME.service
Beim nächsten Neustart sollte es starten!
Weitere Details finden Sie auf der systemd.service
Manpage. Es gibt viele Optionen, die interessant sein könnten.
Folgendes verwende ich unter Ubuntu über upstart
. Folgendes habe ich in die Datei eingefügt/etc/init/geth.conf
description "geth 1.3.5"
start on runlevel [2345]
stop on shutdown
respawn
respawn limit 10 5
setuid your_nonroot_user
script
exec bash -c '/usr/bin/geth --rpc --verbosity "2" 2>>/home/geth/logs/geth'
end script
Dies wird beim Booten gestartet und Sie können über steuernsudo start|stop geth
which geth
Annehmen PATH-TO-GETH
ist das Ergebnis vonwhich geth
sudo cp PATH-TO-GETH /etc/init.d/
sudo chmod +x /etc/init.d/geth
sudo update-rc.d geth defaults
@reboot /path/to/script
#!/bin/bash
#
# chkconfig: 35 90 12
# description: Geth Instance
#
# Get function from functions library
. /etc/init.d/functions
# Start the service GETH
start() {
initlog -c "echo -n Starting GETH: "
/path/to/geth &
### Create the lock file ###
touch /var/lock/subsys/geth
success $"geth startup"
echo
}
# Restart the service geth
stop() {
initlog -c "echo -n Stopping GETH: "
killproc geth
### Now, delete the lock file ###
rm -f /var/lock/subsys/geth
echo
}
### main logic ###
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status geth
;;
restart|reload|condrestart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status}"
exit 1
esac
exit 0
Hier ist eine weitere Einstellung für das Upstart-Skript für Ubuntu 14.04 als Ansible-Playbook-Vorlage und Nicht-Root-Benutzer:
description "geth 1.4.12"
start on runlevel [2345]
stop on shutdown
respawn
respawn limit 10 5
script
exec sudo -H -i -u {{ ansible_user }} -- bash -c '/usr/bin/geth {{geth_args}} 2>>/home/{{ansible_user}}/logs/geth.log'
end script
Installation - roles/geth/tasks/main.yml
:
- name: Install dependencies
apt: name={{item}} update_cache=yes
with_items:
- software-properties-common
become: yes
- name: Install Ethereum repositories
apt_repository: repo='ppa:ethereum/ethereum'
become: yes
- name: Install geth
apt: name={{item}} update_cache=yes
with_items:
- ethereum
become: yes
notify:
- Restart geth
- name: Create logs folder
file:
path: "/home/{{ansible_user}}/logs"
state: directory
- name: Setup startup script
template:
src: geth.conf
dest: /etc/init/geth.conf
become: yes
notify:
- Restart geth
Als systemd ausfü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
OMG, ich habe es endlich geschafft...
Geth-Dienstdatei erstellen: /etc/init.d/geth
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: geth
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $network $named $time
# Should-Stop: $network $named $time
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop the geth daemon
# Description: Controls the geth server daemon
### END INIT INFO
#
. /lib/lsb/init-functions
start() {
PCOUNT=`pgrep -c geth`
if ((PCOUNT==1)); then
/usr/bin/geth --testnet --syncmode=light --rpc --verbosity 0 --cache=1024 &
fi
echo $"Geth Started"
}
stop() {
PCOUNT=`pgrep -c geth`
if ((PCOUNT>1)); then
/usr/bin/killall -9 geth &
fi
echo "Geth Stopped"
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status geth
;;
restart|reload|condrestart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status}"
exit 1
esac
exit 0
Berechtigungen festlegen
sudo chmod 755 /etc/init.d/geth
sudo chown root:root /etc/init.d/geth
Aktivieren Sie den Geth-Dienst
sudo update-rc.d geth defaults
sudo update-rc.d geth enable
eur10