Automatically restart bitcoind on crash

5

1

On Ubuntu 14.04 I have not been able to get the Bitcoin daemon to automatically restart. Rarely the daemon dies and it is important that it starts again without manual intervention. To get it to start automatically with Upstart I have followed the guide linked below. It starts with sudo start bitcoind as expected but the service does not restart if it fails.

Ubuntu Linux — How do I start bitcoind as a service to run automatically?

My conf file in /etc/init/ is as follows.

description "bitcoind"

start on filesystem
stop on runlevel [!2345]
oom score -500
expect fork
respawn
respawn limit 20 90 # 10 times in 60 seconds

script
user=bitcoinuser
home=/home/$user
cmd=/usr/bin/bitcoind
pidfile=$home/.bitcoin/bitcoind.pid
# Don't change anything below here unless you know what you're doing
[[ -e $pidfile && ! -d "/proc/$(cat $pidfile)" ]] && rm $pidfile
[[ -e $pidfile && "$(cat /proc/$(cat $pidfile)/cmdline)" != $cmd* ]] && rm $pidfile
exec start-stop-daemon --start -c $user --chdir $home --pidfile $pidfile --startas $cmd -b --nicelevel 15 -m
end script

If I run ps -aux | grep bitcoind to get the process ID and kill it the daemon does not restart as desired. I have followed the guide and cannot see what is wrong with the set up. As a side note sudo stop bitcoind does not actually stop it from running.

Any help on this would be appreciated.

Peter Bushnell

Posted 2015-11-13T13:03:26.267

Reputation: 194

I'm not that well versed in Linux myself, but you should be able to run Bitcoind with regular user rights. Why do you use sudo start bitcoind?

My Bitcoin Node on a RaspberryPi had been crashing every once in a while from overload, so I had just put a command in a cron job that tries to start it every hour. If its already running, no problem. If it wasn't it is down no more than an hour. – Murch 2015-11-13T13:40:54.343

Starting as a normal user I get the following error start: Rejected send message, 1 matched rules; type="method_call", sender=":1.13" (uid=1002 pid=5367 comm="start bitcoind ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")Peter Bushnell 2015-11-13T13:58:56.213

Sorry, I'm not familiar with the script you're using. I meant, I have installed Bitcoin with a regular account and then could start it using bitcoind, I didn't think that it would need to run with admin rights. But perhaps you need it because you are running it from another user account? Sorry that I'm not able to help, but I really don't know too much about Linux.Murch 2015-11-13T14:15:18.933

Looks like he is running bitcoind as a normal user (bitcoinuser), he only uses the start command as root to trigger the service to start. (I'm not familiar with the latest Ubuntu, the more common command in linux would be service bitcoind start ). Murch's crontab suggestion is probably easiest.Jannes 2015-11-13T14:26:44.040

I agree. This is not working for me and I've spent far too much time working on this when a simple cron job would work. So that is what I am going to do, thanks for the suggestion Murch.Peter Bushnell 2015-11-13T16:11:51.900

Alright, I'll put it as an answer.Murch 2015-11-16T23:43:56.487

Answers

1

I'm running a RaspberryPi Bitcoin node. Since I discovered that the node had sometimes crashed due to overload, I put an hourly starting command into crontab:

@hourly <completePath>/bitcoind -daemon -disablewallet

If bitcoind is already running, it fails to start due to not getting a lock on the data directory. Otherwise, the server will be restarted with at most one hour of downtime.

I'm sure there are more elegant solutions, but I didn't explore it much further as this worked for me.

Murch

Posted 2015-11-13T13:03:26.267

Reputation: 41 609

0

Add this to your /etc/inittab:

bd:1234:respawn:sudo -u <USERNAME_TO_RUN_bitcoind> <DIRECTORY_CONTAINING_bitcoind>/bitcoind

Then run

telinit q

to rescan the inittab file.

Change everything in the <> in the above example to suite your case. Make sure the first two letters ("bd" for bitcoind in the above example) are unique; you can make them any two letters, as long as nothing else in the inittab uses them.

This will make it so bitcoind restarts immediately after it crashes.

cf. man inittab for more info.

Geremia

Posted 2015-11-13T13:03:26.267

Reputation: 3 665