Trên Ubuntu 20.04 LTS, tôi đã tạo một đơn vị dịch vụ/systemd cho bitcoind, nhưng khi khởi động nó, tôi gặp lỗi này:
Không thể mở tệp PID /run/bitcoind/bitcoind.pid (chưa?) sau khi bắt đầu: Thao tác không được phép
Điều này nghe có vẻ giống như một vấn đề về quyền (?), nhưng tôi hiểu rằng tệp PID và/hoặc thư mục chứa nó là một loại tạm thời, giống như chỉ xuất hiện khi dịch vụ đang chạy, vậy làm cách nào để bạn gán quyền lâu dài cho thứ gì đó xuất hiện và đi? Có vẻ như tất cả các quyền sẽ cần phải được thay đổi cho việc này. Tôi có thể làm gì để thiết bị chạy chính xác?
â bitcoind.service - Bitcoin daemon
Đã tải: đã tải (/etc/systemd/system/bitcoind.service; đã bật; giá trị đặt trước của nhà cung cấp: đã bật)
Hoạt động: không thành công (Kết quả: mã thoát) kể từ Chủ Nhật 2021-06-20 09:46:57 CDT; 14s trước
Quy trình: 104861 ExecStart=/usr/local/bin/bitcoind -daemon -pid=/run/bitcoind/bitcoind.pid -conf=/home/first/.bitcoin/bitcoin.conf -datadir=/blockchain/.bitcoin/data (mã=đã thoát, trạng thái=0/THÀNH CÔNG)
PID chính: 104866 (mã=đã thoát, trạng thái=1/THẤT BẠI)
Ngày 20 tháng 6 09:46:57 server systemd[1]: Khởi động Bitcoin daemon...
Ngày 20 tháng 6 09:46:57 máy chủ systemd[1]: bitcoind.service: Không thể mở tệp PID /run/bitcoind/bitcoind.pid (chưa?) sau khi bắt đầu: Thao tác không được phép
Ngày 20 tháng 6 09:46:57 máy chủ systemd[1]: Bắt đầu daemon Bitcoin.
Ngày 20 tháng 6 09:46:57 máy chủ systemd[1]: bitcoind.service: Quá trình chính đã thoát, mã=đã thoát, trạng thái=1/THẤT BẠI
Ngày 20 tháng 6 09:46:57 máy chủ systemd[1]: bitcoind.service: Không thành công với kết quả 'mã thoát'.
Tôi đang sử dụng tệp bitcoind.service này được điều chỉnh từ Hướng dẫn thiết lập Raspibolt của Stadicus:
# RaspiBolt: đơn vị systemd cho bitcoind
# /etc/systemd/system/bitcoind.service
[Đơn vị]
Mô tả=Bitcoin daemon
Sau=mạng.mục tiêu
[Dịch vụ]
# Thực hiện dịch vụ
###################
ExecStart=/usr/local/bin/bitcoind -daemon \
-pid=/run/bitcoind/bitcoind.pid \
-conf=/home/first/.bitcoin/bitcoin.conf \
-datadir=/blockchain/.bitcoin/data
# Quản lý quy trình
####################
Loại = rẽ nhánh
PIDFile=/run/bitcoind/bitcoind.pid
#ExecStartPost=/bin/sh -c 'chown first:first /run/bitcoind/bitcoind.pid'
# Khởi động lại=khi thất bại
#TimeoutSec=300
#RestartSec=30
# Tạo thư mục và quyền
###################################
# Chạy dưới dạng bitcoin:bitcoin
Người dùng = đầu tiên
Nhóm = đầu tiên
# /run/bitcoind
RuntimeDirectory=bitcoind
RuntimeDirectoryMode=0710
# Các biện pháp cứng rắn
####################
# Cung cấp một /tmp và /var/tmp riêng tư.
RiêngTmp=true
# Gắn /usr, /boot/ và /etc chỉ đọc cho tiến trình.
Hệ thống bảo vệ=đầy đủ
# Từ chối truy cập /home, /root và /run/user
ProtectHome=true
# Không cho phép tiến trình và tất cả các phần tử con của nó đạt được
# đặc quyền mới thông qua execve().
NoNewPrivileges=true
# Sử dụng không gian tên /dev mới chỉ được điền với các thiết bị giả API
# chẳng hạn như /dev/null, /dev/zero và /dev/random.
Thiết bị riêng tư=true
# Từ chối việc tạo ánh xạ bộ nhớ có thể ghi và thực thi.
MemoryDenyWriteExecute=true
[Cài đặt]
WantedBy=multi-user.target
Bạn có thể thấy tôi đã thử thêm phần này vào tệp bitcoind.service:
ExecStartPost=/bin/sh -c 'chown first:first /run/bitcoind/bitcoind.pid'
Nhưng nó không hoạt động và dường như thực thi trước khi tệp bitcoind.pid tồn tại.