На Ubuntu 20.04 LTS я сделал службу / systemd для bitcoind, но когда я запускаю его, я получаю эту ошибку:
Не удается открыть PID файл /run/bitcoind/bitcoind.pid (еще?) после запуска: Operation not allowed
Что звучит как проблема с разрешениями(?), но я понимаю, что PID файл и/или папка, содержащая его, являются своего рода эфемерными, например, появляются только во время работы службы, и поэтому как бы вы назначили продолжительные разрешения для чего-то, что приходит и уходит? Также не кажется, что для этого вообще нужно изменять разрешения. Что я могу сделать, чтобы заставить устройство работать правильно?
● bitcoind.service - Bitcoin daemon
Loaded: loaded (/etc/systemd/system/bitcoind.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2021-06-20 09:46:57 CDT; 14s ago
Process: 104861 ExecStart=/usr/local/bin/bitcoind -daemon -pid=/run/bitcoind/bitcoind.pid -conf=/home/first/.bitcoin/bitcoin.conf -datadir=/blockchain/.bitcoin/data (code=exited, status=0/SUCCESS)
Main PID: 104866 (code=exited, status=1/FAILURE)
Jun 20 09:46:57 server systemd[1]: Starting Bitcoin daemon...
Jun 20 09:46:57 server systemd[1]: bitcoind.service: Can't open PID file /run/bitcoind/bitcoind.pid (yet?) after start: Operation not permitted
Jun 20 09:46:57 server systemd[1]: Started Bitcoin daemon.
Jun 20 09:46:57 server systemd[1]: bitcoind.service: Main process exited, code=exited, status=1/FAILURE
Jun 20 09:46:57 server systemd[1]: bitcoind.service: Failed with result 'exit-code'.
Я использую этот файл bitcoind.service, адаптированный из Stadicus' Raspibolt setup guide:
# RaspiBolt: systemd unit for bitcoind
# /etc/systemd/system/bitcoind.service
[Unit]
Description=Bitcoin daemon
After=network.target
[Service]
# Service execution
###################
ExecStart=/usr/local/bin/bitcoind -daemon \
-pid=/run/bitcoind/bitcoind.pid \
-conf=/home/first/.bitcoin/bitcoin.conf \
-datadir=/blockchain/.bitcoin/data
# Process management
####################
Type=forking
PIDFile=/run/bitcoind/bitcoind.pid
#ExecStartPost=/bin/sh -c 'chown first:first /run/bitcoind/bitcoind.pid'
#Restart=on-failure
#TimeoutSec=300
#RestartSec=30
# Directory creation and permissions
####################################
# Run as bitcoin:bitcoin
User=first
Group=first
# /run/bitcoind
RuntimeDirectory=bitcoind
RuntimeDirectoryMode=0710
# Hardening measures
####################
# Provide a private /tmp and /var/tmp.
PrivateTmp=true
# Mount /usr, /boot/ and /etc read-only for the process.
ProtectSystem=full
# Deny access to /home, /root and /run/user
ProtectHome=true
# Disallow the process and all of its children to gain
# new privileges through execve().
NoNewPrivileges=true
# Use a new /dev namespace only populated with API pseudo devices
# such as /dev/null, /dev/zero and /dev/random.
PrivateDevices=true
# Deny the creation of writable and executable memory mappings.
MemoryDenyWriteExecute=true
[Install]
WantedBy=multi-user.target
Вы можете видеть, что я пытался добавить это в файл bitcoind.service:
ExecStartPost=/bin/sh -c 'chown first:first /run/bitcoind/bitcoind.pid'
Но это не сработало и, похоже, выполняется до того, как существует файл bitcoind.pid.
Не удается открыть файл PID /run/bitcoind/bitcoind.pid
Либо / run
, либо / run / bitcoid
, либо /run/bitcoind/bitcoind.pid
не существует, либо, если он существует, он не принадлежит пользователь группы, которому это нужно.
Пользователь = первый
предполагает, что пользователь является «первым», и когда файл pid принадлежит другому пользователю (/ группа), то «первый» вы также получаете «доступ запрещен».
# Запуск как биткойн: биткойн Пользователь = первый Группа = первый
Обратите внимание, что здесь указано, что это должно быть:
# Запускать как биткойн : биткойн Пользователь = биткойн Группа = биткойн
, а не «первый».
Два вывода:
# Deny access to /home, /root and /run/user
ProtectHome=true
/home/.bitcoin — это место, где у меня есть файл bitcoin.conf, так что в этом проблема. Перемещение bitcoin.conf в другое место,или отключение ProtectHome позволяет службе успешно запуститься в данном конкретном случае.
Can't open PID file /run/bitcoind/bitcoind.pid (yet?) after start: Operation not permitted
Это сообщение появляется время от времени, даже когда служба запускается нормально, и поэтому, по-видимому, в данном случае это вообще не проблема.