บน Ubuntu 20.04 LTS ฉันสร้างหน่วยบริการ / systemd สำหรับ bitcoind แต่เมื่อฉันเริ่มต้น ฉันได้รับข้อผิดพลาดนี้:
ไม่สามารถเปิดไฟล์ PID /run/bitcoind/bitcoind.pid (ยัง?) หลังจากเริ่มต้น: ไม่อนุญาตให้ดำเนินการ
ซึ่งฟังดูเหมือนปัญหาเรื่องสิทธิ์ (?) แต่ความเข้าใจของฉันคือไฟล์ PID และ/หรือโฟลเดอร์ที่มีไฟล์นั้นเป็นแบบชั่วคราว เช่น ปรากฏขึ้นเฉพาะในขณะที่บริการกำลังทำงาน ดังนั้นคุณจะกำหนดสิทธิ์ถาวรให้กับสิ่งที่มาได้อย่างไร และไป? ดูเหมือนว่าจะต้องเปลี่ยนการอนุญาตทั้งหมดสำหรับสิ่งนี้ ฉันจะทำอย่างไรเพื่อให้เครื่องทำงานได้อย่างถูกต้อง
â bitcoind.service - ภูต Bitcoin
โหลดแล้ว: โหลดแล้ว (/etc/systemd/system/bitcoind.service; เปิดใช้งาน; การตั้งค่าล่วงหน้าของผู้ขาย: เปิดใช้งาน)
ใช้งานอยู่: ล้มเหลว (ผลลัพธ์: exit-code) ตั้งแต่ อา. 2021-06-20 09:46:57 CDT; 14s ที่ผ่านมา
กระบวนการ: 104861 ExecStart=/usr/local/bin/bitcoind -daemon -pid=/run/bitcoind/bitcoind.pid -conf=/home/first/.bitcoin/bitcoin.conf -datadir=/blockchain/.bitcoin/data (รหัส=ออก, สถานะ=0/สำเร็จ)
PID หลัก: 104866 (รหัส=ออก สถานะ=1/ล้มเหลว)
20 มิ.ย. 09:46:57 server systemd[1]: กำลังเริ่ม Bitcoin daemon...
20 มิ.ย. 09:46:57 เซิร์ฟเวอร์ systemd[1]: bitcoind.service: ไม่สามารถเปิดไฟล์ PID /run/bitcoind/bitcoind.pid (ยัง?) หลังจากเริ่มต้น: ไม่อนุญาตให้ดำเนินการ
20 มิ.ย. 09:46:57 เซิร์ฟเวอร์ systemd[1]: เริ่มใช้ Bitcoin daemon
20 มิ.ย. 09:46:57 เซิร์ฟเวอร์ systemd[1]: bitcoind.service: ออกจากกระบวนการหลักแล้ว, รหัส=ออกแล้ว, สถานะ=1/ล้มเหลว
20 มิ.ย. 09:46:57 เซิร์ฟเวอร์ systemd[1]: bitcoind.service: ล้มเหลวด้วยผลลัพธ์ 'exit-code'
ฉันใช้ไฟล์ bitcoind.service ที่ดัดแปลงมาจาก คู่มือการตั้งค่า Raspibolt ของ Stadicus:
# RaspiBolt: หน่วย systemd สำหรับ bitcoind
# /etc/systemd/system/bitcoind.service
[หน่วย]
คำอธิบาย=Bitcoin daemon
หลังจาก = network.target
[บริการ]
#การดำเนินการบริการ
###################
ExecStart=/usr/local/bin/bitcoind -daemon \
-pid=/run/bitcoind/bitcoind.pid \
-conf=/home/first/.bitcoin/bitcoin.conf \
-datadir=/blockchain/.bitcoin/data
#การจัดการกระบวนการ
######################
ประเภท = ส้อม
PIDFile=/run/bitcoind/bitcoind.pid
#ExecStartPost=/bin/sh -c 'chown first:first /run/bitcoind/bitcoind.pid'
#รีสตาร์ท=เมื่อล้มเหลว
#หมดเวลาวินาที=300
#รีสตาร์ทวินาที=30
# การสร้างไดเร็กทอรีและการอนุญาต
####################################
# ทำงานเป็น bitcoin:bitcoin
ผู้ใช้ = อันดับแรก
กลุ่ม = อันดับแรก
# /รัน/บิตคอยน์
RuntimeDirectory=บิตคอยน์
RuntimeDirectoryMode=0710
#มาตรการเร่งรัด
######################
# ระบุ /tmp ส่วนตัวและ /var/tmp
PrivateTmp=จริง
# เมานต์ /usr, /boot/ และ /etc แบบอ่านอย่างเดียวสำหรับกระบวนการ
ProtectSystem=เต็ม
# ปฏิเสธการเข้าถึง /home, /root และ /run/user
ProtectHome=จริง
# ไม่อนุญาตให้กระบวนการและลูก ๆ ของมันได้รับ
# สิทธิพิเศษใหม่ผ่าน excve()
NoNewPrivileges=จริง
# ใช้เนมสเปซ /dev ใหม่ที่มีอุปกรณ์หลอก API เท่านั้น
# เช่น /dev/null, /dev/zero และ /dev/random
อุปกรณ์ส่วนตัว = จริง
# ปฏิเสธการสร้างการแมปหน่วยความจำที่เขียนได้และปฏิบัติการได้
MemoryDenyWriteExecute=จริง
[ติดตั้ง]
WantedBy=multi-user.target
คุณสามารถเห็นว่าฉันพยายามเพิ่มสิ่งนี้ในไฟล์ bitcoind.service:
ExecStartPost=/bin/sh -c 'chown ก่อน: first /run/bitcoind/bitcoind.pid'
แต่มันใช้งานไม่ได้และดูเหมือนว่าจะดำเนินการก่อนที่จะมีไฟล์ bitcoind.pid อยู่