Tôi có một tập lệnh đang chạy với quyền root và đang cố gắng thiết lập một dịch vụ người dùng để chạy trình nền IPFS. Vấn đề là tôi cần kích hoạt dịch vụ với tư cách là người dùng chứ không phải là người chủ. Nó thường hoạt động sau khi khởi động lại nhưng tôi muốn tránh điều đó nếu có thể.
Tập lệnh dịch vụ được đặt tại ~/.config/systemd/user/ipfs.service
Nó chứa:
[Đơn vị]
Mô tả=IPFS daemon
[Dịch vụ]
# Môi trường="IPFS_PATH=/data/ipfs" # đường dẫn tùy chọn tới thư mục init ipfs nếu không phải là mặc định (\$HOME/.ipfs)
ExecStart=/usr/local/bin/ipfs daemon
Khởi động lại = khi thất bại
[Cài đặt]
WantedBy=default.target
(Tôi lấy mã này từ đây: https://github.com/ipfs/go-ipfs/tree/master/misc )
Nếu tôi chạy các lệnh này với tư cách là người dùng thì nó hoạt động chính xác:
systemctl --user kích hoạt ipfs
systemctl --user bắt đầu ipfs
Vấn đề là tập lệnh của tôi đang chạy với quyền root và tôi không thể tìm ra cách để tập lệnh này chạy với tư cách người dùng. Tôi đã thử điều này cho đến nay:
# Cho phép kéo dài để IPFS có thể chạy khi khởi động
trình kéo dài kích hoạt loginctl $USER_ACCOUNT
# Cho phép dịch vụ chạy khi khởi động
sudo -u $USER_ACCOUNT systemctl --user kích hoạt ipfs
# Bắt đầu dịch vụ ngay bây giờ
sudo -u $USER_ACCOUNT systemctl --user bắt đầu ipfs
Rất tiếc, dịch vụ này không khởi động và khi tôi nhận được thông báo lỗi này:
Không thể kết nối với xe buýt: $DBUS_SESSION_BUS_ADDRESS và $XDG_RUNTIME_DIR không được xác định (cân nhắc sử dụng [email protected] --user để kết nối với xe buýt của người dùng khác)
Khi tập lệnh kết thúc và tôi khởi động lại, dịch vụ sẽ bắt đầu tốt nhưng tôi muốn tránh người dùng phải khởi động lại nếu có thể. Bất kỳ trợ giúp sẽ được đánh giá cao.