<p><strong>EDIT</strong>: Caveat emptor on Ubuntu distributions from 14.10 and forward - <a href="http://www.markshuttleworth.com/archives/1316" rel="noreferrer"><code>init</code> was chosen over <code>upstart</code> and is being phased in the future</a>. I don't know when that will be done nor what impact it will have on upstart scripts.</p>
<p><a href="https://bitcointalk.org/index.php?topic=25518.0" rel="noreferrer">Extract from the page RentFree refers to</a>; note that it assumes that you have created a user called <code>bitcoinuser</code> for the sake of security:</p>
<blockquote>
<p>For those running ubuntu, you may be familiar with <a href="http://upstart.ubuntu.com/" rel="noreferrer">upstart</a>, a replacement for <code>sysvinit</code> style booting (<code>/etc/init.d/*</code>).</p>
<p>Configuration files for upstart are stored under <code>/etc/init/*.conf</code>. I've written the following one for bitcoind:</p>
<pre><code>description &quot;bitcoind&quot;

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 &amp;&amp; ! -d &quot;/proc/$(cat $pidfile)&quot; ]] &amp;&amp; rm $pidfile
[[ -e $pidfile &amp;&amp; &quot;$(cat /proc/$(cat $pidfile)/cmdline)&quot; != $cmd* ]] &amp;&amp; rm $pidfile
exec start-stop-daemon --start -c $user --chdir $home --pidfile $pidfile --startas $cmd -b -m
end script
</code></pre>
<p>Put the above configuration in <code>/etc/init/bitcoind.conf</code>, then run <code>sudo initctl reload-configuration</code>. To start <code>bitcoind</code>, run <code>sudo start bitcoind</code>. To stop <code>bitcoind</code>, run <code>sudo stop bitcoind</code>.</p>
<p>You'll probably want to change the <strong>user</strong>, <strong>cmd</strong> and <strong>pidfile</strong> to something that matches your configuration, or you can use the following as a template:</p>
<pre><code>/home/bitcoinuser
/home/bitcoinuser/bitcoind.pid
/home/bitcoinuser/bin/bitcoind
</code></pre>
</blockquote>
<p>Though one user suggests the following correction to the configuration:</p>
<blockquote>
<pre><code>home=/home/$user
cmd=/usr/bin/bitcoind
pidfile=$home/.bitcoin/bitcoind.pid
</code></pre>
</blockquote>
<p>and another suggests setting <code>nice</code> for the process so it doesn't hog the CPU</p>
<blockquote>
<pre><code>exec start-stop-daemon --start -c $user --chdir $home --pidfile $pidfile --startas $cmd -b --nicelevel 15 -m
</code></pre>
</blockquote>

CC BY-SA 3.0
2014-01-04T13:52:55.577Z
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
CC BY-SA 3.0
2014-01-04T14:31:48.280Z
If 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
CC BY-SA 3.0
2014-01-04T16:21:40.210Z
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
CC BY-SA 3.0
2014-01-04T16:45:07.413Z
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](http://paste.ubuntu.com/6691761/). 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](http://explainshell.com/explain/1/pastebinit).
Jan
CC BY-SA 3.0
2014-09-08T19:57:09.237Z
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
CC BY-SA 3.0
2015-01-18T15:04:27.293Z
@c.hill, you can edit the answers here :-) - I have amended as suggested
Jan
CC BY-SA 3.0
2013-12-19T12:01:27.487Z
2015-01-18T15:03:41.360Z
2020-06-16T11:10:03.350Z
Jan
<p>There's an <a href="https://github.com/bitcoin/bitcoin/blob/2d782ab2ce30bf106e34cd3288c9082ac04022f9/contrib/init/bitcoind.conf" rel="noreferrer">upstart script for Ubuntu</a> in the Bitcoin Core source tree.  Using that is the most correct way.</p>

<p>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:</p>

<pre><code>crontab -e
</code></pre>

<p>Then I add the following line:</p>

<pre><code>@reboot bitcoind -daemon
</code></pre>

<p>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.</p>

CC BY-SA 3.0
2016-12-22T08:22:54.073Z
but upstart is not used by Ubuntu anymore, right?
knocte
CC BY-SA 3.0
2018-03-11T02:24:26.990Z
yes what does that mean?
tofutim
CC BY-SA 3.0
2015-01-18T15:52:22.377Z
2015-01-18T15:52:22.377Z
David A. Harding
<p>I finally end up with this setting for my raspberry</p>

<pre><code>nano /etc/systemd/system/bitcoind.service
</code></pre>

<p>content of the file <code>bitcoind.service</code></p>

<pre><code>[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
</code></pre>

<p>Reload systemctl daemon</p>

<pre><code>systemctl daemon-reload
</code></pre>

<p>Enabled new bitcoind service</p>

<pre><code>systemctl enable bitcoind
</code></pre>

<p>Commands to start or stop the service</p>

<pre><code>systemctl stop bitcoind
systemctl start bitcoind
</code></pre>

<p>Show service status</p>

<pre><code>systemctl status bitcoind.service  
</code></pre>

<p>More info in <a href="https://github.com/bitcoin/bitcoin/tree/master/contrib/init" rel="nofollow noreferrer">https://github.com/bitcoin/bitcoin/tree/master/contrib/init</a> </p>

<p>thanks for the help Janus Troelsen</p>

<p><strong>Update</strong></p>

<p>Don't put arguments since I have considered that there is a configuration in </p>

<pre><code>/home/pi/.bitcoin/bitcoin.conf
</code></pre>

CC BY-SA 4.0
2019-08-28T10:42:42.297Z
nice one, but you missed a `d`: `/etc/systemd/system/bitcoind.service`.
bomben
CC BY-SA 4.0
2021-02-11T07:27:20.180Z
All good except you want `Type=simple`
tread
CC BY-SA 4.0
2023-12-28T18:58:55.967Z
@tread In Dogecoin, I had trouble getting `Type=simple` to work. I kept getting `dogecoind.service: Deactivated Successfully`. Only after I set it to `Type=forking` was I able to get it working.
david2278
CC BY-SA 4.0
2019-04-12T20:47:31.800Z
2019-11-27T16:29:04.130Z
2019-11-27T16:29:04.130Z
Jose Luis Estevez
<p>I've never run it before. You said that bitcoind is a daemon, so here how to configure a daemon to run at startup : </p>

<p>Normally a daemon has its init script in <code>/etc/init.d/</code> directory.</p>

<pre><code>sudo /etc/init.d/bitcoind start
</code></pre>

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

<p>0 -> 6 are runlevels :</p>

<pre><code>0 - Halt
1 - Single User Mode
2 - Multiuser
3 - Full Multiuser Mode
4 - unused
5 - Full Multiuser Mode with x11
6 - Reboot
</code></pre>

<p>you can also add the script that your daemon runs in </p>

<pre><code>/etc/rc.local
</code></pre>

<p>If it is a python script you can write to that file :</p>

<pre><code>python /directory/to/init/script/bitcoind.py
</code></pre>

<p>Another alternative is to execute <code>update-rc.d</code> :</p>

<pre><code>sudo update-rc.d bitcoind defaults
</code></pre>

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

<pre><code>update-rc.d bitcoind start 20 2 3 4 5 . stop 20 0 1 6
</code></pre>

<p>run <code>man update-rc.d</code> , there are other examples .</p>

<p>To remove it from startup, run :</p>

<pre><code>sudo update-rc.d bitcoind remove
</code></pre>

CC BY-SA 4.0
2019-08-28T08:19:20.433Z
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`.
bomben
CC BY-SA 4.0
2019-08-28T08:24:33.347Z
Ah, I have a `bitcoin.service` in `/etc/systemd/system/` which contains the right path.
bomben
CC BY-SA 3.0
2013-12-19T16:18:23.790Z
2013-12-19T16:18:23.790Z
4m1nh4j1
<p>This seems to be your answer: <a href="https://bitcointalk.org/index.php?topic=25518.0" rel="nofollow">https://bitcointalk.org/index.php?topic=25518.0</a></p>

CC BY-SA 3.0
2013-10-16T01:55:44.173Z
2013-10-16T01:55:44.173Z
RentFree
<p>I've developed a script that may help you install AND run Bitcoin's CLI daemon at the same time.</p>

<pre><code>sudo apt-get install software-properties-common
&lt;your password&gt;
y
sudo apt-get update
sudo apt-add-repository ppa:bitcoin/bitcoin

sudo apt-get update
sudo apt-get upgrade
y
sudo apt-get install bitcoind
y
bitcoind -daemon
bitcoind -testnet -daemon
</code></pre>

<p>*The space between apt-add-repository and update is supposed to be there because of a prompt to press ENTER.</p>

CC BY-SA 3.0
2016-11-02T18:37:28.990Z
2016-11-02T18:51:48.560Z
2016-11-02T18:51:48.560Z
Jesse Cochran
<p>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.)</p>

<p>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.)</p>

<p>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!</p>

<p>Thanks so much.</p>

CC BY-SA 3.0
2015-08-25T11:07:51.297Z
see this directory: https://github.com/bitcoin/bitcoin/tree/master/contrib/init it has startup scripts for many init systems
Janus Troelsen
<bitcoind><services><server><ubuntu><daemon>
Ubuntu Linux -- How do I start bitcoind as a service to run automatically?
Christopher Steffen
# Ubuntu Linux -- How do I start bitcoind as a service to run automatically?

(Asked by: username_0 on 2013-10-16)

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.

**Tags:** bitcoind, services, server, ubuntu, daemon

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

---

## 6 answers

### Answer by username_2 on 2013-12-19. Score: 16

**EDIT**: Caveat emptor on Ubuntu distributions from 14.10 and forward - [`init` was chosen over `upstart` and is being phased in the future](http://www.markshuttleworth.com/archives/1316). I don't know when that will be done nor what impact it will have on upstart scripts.

[Extract from the page username_13 refers to](https://bitcointalk.org/index.php?topic=25518.0); 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](http://upstart.ubuntu.com/), 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
>
> ```

> **Comments:**
> **username_3**: 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?  
> **username_2**: If 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.  
> **username_3**: 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.  
> **username_2**: 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](http://paste.ubuntu.com/6691761/). 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](http://explainshell.com/explain/1/pastebinit).  
> **username_4**: 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  
> **username_2**: @username_4, you can edit the answers here :-) - I have amended as suggested  

---

### Answer by username_5 on 2015-01-18. Score: 13

There's an [upstart script for Ubuntu](https://github.com/bitcoin/bitcoin/blob/2d782ab2ce30bf106e34cd3288c9082ac04022f9/contrib/init/bitcoind.conf) 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.

> **Comments:**
> **username_6**: but upstart is not used by Ubuntu anymore, right?  
> **username_7**: yes what does that mean?  

---

### Answer by username_8 on 2019-04-12. Score: 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

```

Reload systemctl daemon

```
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  

```

More info in <https://github.com/bitcoin/bitcoin/tree/master/contrib/init>

thanks for the help username_1

**Update**

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

```
/home/pi/.bitcoin/bitcoin.conf

```

> **Comments:**
> **username_9**: nice one, but you missed a `d`: `/etc/systemd/system/bitcoind.service`.  
> **username_10**: All good except you want `Type=simple`  
> **username_11**: @username_10 In Dogecoin, I had trouble getting `Type=simple` to work. I kept getting `dogecoind.service: Deactivated Successfully`. Only after I set it to `Type=forking` was I able to get it working.  

---

### Answer by username_12 on 2013-12-19. Score: 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

```

> **Comments:**
> **username_9**: 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`.  
> **username_9**: Ah, I have a `bitcoin.service` in `/etc/systemd/system/` which contains the right path.  

---

### Answer by username_13 on 2013-10-16. Score: 1

This seems to be your answer: <https://bitcointalk.org/index.php?topic=25518.0>


---

### Answer by username_14 on 2016-11-02. Score: -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
<your password>
y
sudo apt-get update
sudo apt-add-repository ppa:bitcoin/bitcoin

sudo apt-get update
sudo apt-get upgrade
y
sudo apt-get install bitcoind
y
bitcoind -daemon
bitcoind -testnet -daemon

```

\*The space between apt-add-repository and update is supposed to be there because of a prompt to press ENTER.


---

