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

20

5

I've got a bunch of other services set up to boot automatically when my Ubuntu server starts (services like wicd-daemon and VPN), but I can't figure out how to set up the bitcoin daemon (bitcoind) to start automatically when the system boots up. (This is on a headless system with no GUI or attached monitor.)

I'm trying to learn how to integrate bitcoin with Python so I can write bitcoin-enabled services, but I want the system to automatically start bitcoind when the system boots so that I don't have to do it manually. (It's a pain in the butt to have to download a whole bunch of block-chain at once. It eats away at uptime.)

If this question has already been asked, please direct me to the answer. I searched but couldn't find it. Otherwise, please help me figure this out!

Thanks so much.

1

see this directory: https://github.com/bitcoin/bitcoin/tree/master/contrib/init it has startup scripts for many init systems

– Janus Troelsen – 2015-08-25T11:07:51.297

16

EDIT: Caveat emptor on Ubuntu distributions from 14.10 and forward - init was chosen over upstart and is being phased in the future. I don't know when that will be done nor what impact it will have on upstart scripts.

Extract from the page RentFree refers to; note that it assumes that you have created a user called bitcoinuser for the sake of security:

For those running ubuntu, you may be familiar with upstart, a replacement for sysvinit style booting (/etc/init.d/*).

Configuration files for upstart are stored under /etc/init/*.conf. I've written the following one for bitcoind:

description "bitcoind"

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

script
user=bitcoinuser
home=/home/$user cmd=$home/bin/bitcoind
pidfile=$home/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 -m end script  Put the above configuration in /etc/init/bitcoind.conf, then run sudo initctl reload-configuration. To start bitcoind, run sudo start bitcoind. To stop bitcoind, run sudo stop bitcoind. You'll probably want to change the user, cmd and pidfile to something that matches your configuration, or you can use the following as a template: /home/bitcoinuser /home/bitcoinuser/bitcoind.pid /home/bitcoinuser/bin/bitcoind  Though one user suggests the following correction to the configuration: home=/home/$user
cmd=/usr/bin/bitcoind
pidfile=$home/.bitcoin/bitcoind.pid  and another suggests setting nice for the process so it doesn't hog the CPU exec start-stop-daemon --start -c$user --chdir $home --pidfile$pidfile --startas $cmd -b --nicelevel 15 -m  Though this works, the upstart log shows some lines like this: /proc/self/fd/9: 9: /proc/self/fd/9: [[: not found. What's that? – kaoD – 2014-01-04T13:52:55.577 2If you're on Ubuntu, try pastebinit -i /etc/init/bitcoind.conf, which will give output a URL with the configuration copied to a publicly accessible page. Double check the URL to make sure that nothing private is in there, then paste the URL here. – Jan – 2014-01-04T14:31:48.280 1 Woah, didn't know pastebinit did exist, cool! Here it goes: http://paste.ubuntu.com/6691665/ but it's pretty much copy and paste from here. – kaoD – 2014-01-04T16:21:40.210 I don't really see anything that should cause problems, but I haven't spent much time on init.d/upstart - here's mine for reference, where I've set it to log and to be more explicit in its output. Note that I use bitcoinuser as the dedicated user. An aside about pastebinit: You can also pipe to it for command output - more info here. – Jan – 2014-01-04T16:45:07.413 1 This answer is almost correct. You should change expect daemon to expect fork and oom never to oom score -500. For more details see: http://stackoverflow.com/a/25731881/1157309 – c.hill – 2014-09-08T19:57:09.237 @c.hill, you can edit the answers here :-) - I have amended as suggested – Jan – 2015-01-18T15:04:27.293 12 There's an upstart script for Ubuntu in the Bitcoin Core source tree. Using that is the most correct way. However, I just login as the user account I want to run Bitcoin Core daemon, start a terminal (if I'm in the GUI), and run the following command to edit my crontab: crontab -e  Then I add the following line: @reboot bitcoind -daemon  Save the file and exit. Now every time the computer boots up, Bitcoin Core daemon will be started. On shutdown, init/upstart/systemd/whatever will send it a SIGTERM signal, which bitcoind will catch and interpret as the command to start a safe shutdown. 1but upstart is not used by Ubuntu anymore, right? – knocte – 2016-12-22T08:22:54.073 1yes what does that mean? – tofutim – 2018-03-11T02:24:26.990 3 I finally end up with this setting for my raspberry nano /etc/systemd/system/bitcoind.service  content of the file bitcoind.service [Unit] Description=bitcoin After=network.target [Service] Type=forking User=pi Group=pi Environment=BITCOIN_PID=/home/pi/.bitcoin/bitcoin.pid Environment=BITCOIN_HOME=/home/pi/.bitcoin ExecStart=/usr/local/bin/bitcoind ExecStop=/bin/kill -15$MAINPID

[Install]
WantedBy=multi-user.target


systemctl daemon-reload


Enabled new bitcoind service

systemctl enable bitcoind


Commands to start or stop the service

systemctl stop bitcoind
systemctl start bitcoind


Show service status

systemctl status bitcoind.service


thanks for the help Janus Troelsen

Update

Don't put arguments since I have considered that there is a configuration in

/home/pi/.bitcoin/bitcoin.conf


1nice one, but you missed a d: /etc/systemd/system/bitcoind.service. – Ben – 2019-08-28T10:42:42.297

All good except you want Type=simple – stephen – 2021-02-11T07:27:20.180

2

I've never run it before. You said that bitcoind is a daemon, so here how to configure a daemon to run at startup :

Normally a daemon has its init script in /etc/init.d/ directory.

sudo /etc/init.d/bitcoind start


If the daemon needs to be initialized at startup, then it will be linked in /etc/rc0.d/ or /etc/rc1.d/ or ... /etc/rc6.d/ ... etc

0 -> 6 are runlevels :

0 - Halt
1 - Single User Mode
2 - Multiuser
3 - Full Multiuser Mode
4 - unused
5 - Full Multiuser Mode with x11
6 - Reboot


you can also add the script that your daemon runs in

/etc/rc.local


If it is a python script you can write to that file :

python /directory/to/init/script/bitcoind.py


Another alternative is to execute update-rc.d :

sudo update-rc.d bitcoind defaults


defaults , will tells update-rc.d to run a default configuration, when it comes to runlevel . You can change your runlevel, this is an exampl :

update-rc.d bitcoind start 20 2 3 4 5 . stop 20 0 1 6


run man update-rc.d , there are other examples .

To remove it from startup, run :

sudo update-rc.d bitcoind remove


I think i removed bitcoind from my startup with your last command. Now it seems that I have troubles to activate it again. My bitcoind had a special working directory. I suspect that the startup skript contained this directory. Did I remove the file physically from /etc/rc.local or /etc/init with this command? Because I dont have a file there any more which is related to bitcoind. – Ben – 2019-08-28T08:19:20.433

Ah, I have a bitcoin.service in /etc/systemd/system/ which contains the right path. – Ben – 2019-08-28T08:24:33.347

1

-3

I've developed a script that may help you install AND run Bitcoin's CLI daemon at the same time.

sudo apt-get install software-properties-common
y
sudo apt-get update