ฉันมีสคริปต์ที่ทำงานในฐานะรูทและกำลังพยายามตั้งค่าบริการผู้ใช้เพื่อเรียกใช้ IPFS daemon ปัญหาคือฉันต้องเปิดใช้งานบริการในฐานะผู้ใช้แทนที่จะเป็นรูท โดยปกติแล้วจะใช้งานได้หลังจากรีสตาร์ท แต่ฉันต้องการหลีกเลี่ยงหากทำได้
สคริปต์บริการอยู่ที่ ~/.config/systemd/user/ipfs.service
ประกอบด้วย:
[หน่วย]
คำอธิบาย=IPFS daemon
[บริการ]
# Environment="IPFS_PATH=/data/ipfs" # เส้นทางทางเลือกไปยังไดเรกทอรีเริ่มต้นของ ipfs หากไม่ใช่ค่าเริ่มต้น (\$HOME/.ipfs)
ExecStart=/usr/local/bin/ipfs daemon
รีสตาร์ท = เมื่อล้มเหลว
[ติดตั้ง]
ต้องการโดย=default.target
(ฉันเอารหัสนี้มาจากที่นี่: https://github.com/ipfs/go-ipfs/tree/master/misc )
หากฉันเรียกใช้คำสั่งเหล่านี้ในฐานะผู้ใช้ คำสั่งจะทำงานได้อย่างถูกต้อง:
systemctl --user เปิดใช้งาน ipfs
systemctl - ผู้ใช้เริ่มต้น ipfs
ปัญหาคือสคริปต์ของฉันทำงานในฐานะรูท และฉันไม่สามารถหาวิธีทำให้สคริปต์นี้ทำงานในฐานะผู้ใช้ได้ ฉันได้ลองแล้ว:
# เปิดใช้งาน linger เพื่อให้ IPFS สามารถทำงานได้เมื่อบู๊ต
loginctl enable-linger $USER_ACCOUNT
# เปิดใช้งานบริการเพื่อเรียกใช้เมื่อบูต
sudo -u $USER_ACCOUNT systemctl --user enable ipfs
#เริ่มใช้บริการได้เลย
sudo -u $USER_ACCOUNT systemctl --user start ipfs
น่าเสียดายที่บริการนี้ไม่เริ่มทำงานและเมื่อฉันได้รับข้อความแสดงข้อผิดพลาดนี้:
ไม่สามารถเชื่อมต่อกับบัส: ไม่ได้กำหนด $DBUS_SESSION_BUS_ADDRESS และ $XDG_RUNTIME_DIR (พิจารณาใช้ [email protected] --user เพื่อเชื่อมต่อกับบัสของผู้ใช้รายอื่น)
เมื่อสคริปต์เสร็จสิ้น และฉันรีบูต บริการก็เริ่มต้นได้ดี แต่ฉันต้องการหลีกเลี่ยงไม่ให้ผู้ใช้ต้องรีบูต หากทำได้ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม