Tôi đã viết một vài tệp dịch vụ người dùng systemd mà tôi muốn người dùng kích hoạt và cần kết nối mạng hoạt động. Tôi nghĩ rằng nó sẽ dễ dàng như:
Wants=network-online.target
After=network-online.target
Tuy nhiên, các dịch vụ dường như bắt đầu quá sớm và trong journalctl
tôi thấy:
network-online.target: Cannot add dependency job, ignoring: Unit network-online.target failed to load: No such file or directory.
Sau đó tôi tìm kiếm thêm và thử
Wants=network.target
After=network.target
và đã làm sudo systemctl enable systemd-networkd-wait-online.service
.
Bây giờ tôi có journalctl
:
network.target: Cannot add dependency job, ignoring: Unit network.target failed to load: No such file or directory.
Và một lần nữa dịch vụ bắt đầu quá sớm.
Có phải tin nhắn đó là ở đó? Làm thế nào tôi có thể gỡ lỗi vấn đề của tôi?
EDIT : lý do rất đơn giản và được nêu cụ thể trong Arch Wiki :
systemd --user
chạy như một quy trình riêng biệt từsystemd --system
quy trình. Đơn vị người dùng không thể tham chiếu hoặc phụ thuộc vào đơn vị hệ thống.
Bài đăng trên diễn đàn này dường như đề xuất một giải pháp đơn giản: Tôi nên link
đơn vị hệ thống cần thiết với tư cách là người dùng, do đó tạo ra một liên kết tượng trưng đến nó có sẵn trên đường dẫn tìm kiếm đơn vị.
Sau khi làm điều đó, tôi không thấy bất kỳ No such file or directory
tin nhắn nào , tuy nhiên, tôi vẫn không thể làm cho các dịch vụ thực sự chạy sau khi mạng trực tuyến. Tôi đã thử liên kết network.target
, network-online.target
và systemd-networkd-wait-online.service
, đặt các đơn vị của mình phụ thuộc vào từng đơn vị, nhưng không thành công. Khi tôi kiểm tra trạng thái của đơn vị được liên kết trong chế độ người dùng, tất cả họ đều đã chết, ví dụ:
$ systemctl --user status network.target
● network.target - Network
Loaded: loaded (/usr/lib/systemd/system/network.target; linked; vendor preset: enabled)
Active: inactive (dead)
Docs: man:systemd.special(7)
http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
$ systemctl status network.target
● network.target - Network
Loaded: loaded (/usr/lib/systemd/system/network.target; static; vendor preset: disabled)
Active: active since Sat 2015-07-18 19:20:11 MSK; 3h 35min ago
Docs: man:systemd.special(7)
http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
Jul 18 19:20:11 calc-server systemd[1]: Reached target Network.
Jul 18 19:20:11 calc-server systemd[1]: Starting Network.
Tuy nhiên, tôi có thể thấy network-online.target
hoạt động trong chế độ người dùng sau khi liên kết nó:
$ systemctl --user status network-online.target
● network-online.target - Network is Online
Loaded: loaded (/usr/lib/systemd/system/network-online.target; linked; vendor preset: enabled)
Active: active since Sun 2015-07-19 00:35:38 MSK; 2min 48s ago
Docs: man:systemd.special(7)
http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
Jul 19 00:35:38 calc-server systemd[469]: Reached target Network is Online.
Jul 19 00:35:38 calc-server systemd[469]: Starting Network is Online.