我正在设置 Monit 来监控比特币守护进程,以确保它全天候运行,并在出现问题时重新启动。比特币二进制文件位于/usr/local/bin/bitcoind
,数据目录位于/home/bitcoin/.bitcoin
。
我已经告诉 Monit 每 2 分钟通过 pid 文件监视守护进程一次/var/run/bitcoind.pid
,并以用户身份启动/停止守护进程bitcoin
。然而,我花了无数个小时试图找出问题所在。
因为我没有的启动/upstart 脚本bitcoind
,所以我直接将命令传递给二进制文件本身,可以通过以下/etc/monit/monitrc
文件看到:
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
系统启动时,我以用户身份登录bitcoin
并启动ps -u bitcoin
。果然,bitcoind
在我的用户下显示为正在运行。但是,当我让 Monit 通过 显示状态时monit status
,响应首先显示为execution failed
,然后显示为not monitored
。
我检查了正在运行/var/run/
时的情况bitcoind
,发现没有名为 的文件bitcoind.pid
,这让我认为在以用户 身份运行时bitcoind
没有足够的权限pid
在 中创建文件。/var/run
bitcoin
作为替代解决方案,我将 pid 文件留在默认位置(/home/bitcoin/.bitcoin/bitcoind.pid
),但 root 无法访问它,这也导致了相同的结果。
该/var/log/monit.log
文件没有提供任何有用的信息,我尝试过的“包装器”也是如此。
bitcoind
这一切都可以通过运行来解决root
,但我担心安全问题。
答案1
您正确地推测该bitcoin
用户没有权限/var/run
写入root
将要能够读取/home/bitcoin/.bitcoin/bitcoind.pid
。我会将 PID 保留在后一个位置,然后再做一些工作来弄清楚为什么 monit 没有读取第二个位置。我敢打赌 monit 配置中的路径可能有拼写错误。