Linux – Monit having trouble determining if the Bitcoin daemon is running

linuxmonit

I'm setting up Monit to monitor the Bitcoin daemon to make sure it runs 24/7 and restarts it if something goes wrong. The Bitcoin binary is at /usr/local/bin/bitcoind, and the data directory is at /home/bitcoin/.bitcoin.

I have told Monit to monitor the daemon through the pid file /var/run/bitcoind.pid every 2 minutes and start / stop the daemon as the user bitcoin. However, this is where I've spent countless hours trying to figure what is wrong.

Because I do not have a startup / upstart script for bitcoind, I have it directly pass commands to the binary itself, which can be seen with the following /etc/monit/monitrc file:

set daemon 120
set logfile /var/log/monit.log 

check process bitcoind with pidfile "/var/run/bitcoind.pid"
    start program "/usr/local/bin/bitcoind -pid=/var/run/bitcoind.pid -datadir=/home/bitcoin/.bitcoin -daemon"
        as uid bitcoin and gid bitcoin
    stop program "/usr/local/bin/bitcoind stop"
        as uid bitcoin and gid bitcoin
    if failed port 8332 for 2 cycles then restart

When the system startups, I login as the user bitcoin and initiate ps -u bitcoin. Sure enough, the bitcoind appears as running under my user. However, when I get Monit to display the status through monit status, the response shows first as execution failed, then not monitored.

I've checked /var/run/ while bitcoind is running and found that there is no such file named as bitcoind.pid, which leaves me to think that the bitcoind does not have sufficient permissions to create a pid file in /var/run while running as user bitcoin.

For an alternative solution, I left the pid file to created in the default location (/home/bitcoin/.bitcoin/bitcoind.pid), but the root can not access it, which also leads to the same result.

The /var/log/monit.log file provides no useful information, so have the 'wrappers' I've tried.

This can all be solved by running bitcoind as root, however I am worried about security issues.

Best Answer

You are correct in surmising that the bitcoin user won't have permission to write to /var/run, however root will be able to read /home/bitcoin/.bitcoin/bitcoind.pid. I would leave the PID in the latter location, and then work some more at figuring out why monit isn't reading that second location. My bet would be a typo in the path in the monit config.

Related Topic