Điểm:3

Làm cách nào tôi có thể chạy dịch vụ systemd sau khi liên kết mạng được thiết lập?

lá cờ us

Cách đây một thời gian, tôi đã thiết lập một dịch vụ systemd để chạy sau khi mạng trực tuyến theo tài liệu. Đây là tập tin đơn vị:

[Đơn vị]
Mô tả=Làm mới danh sách nhân bản Pacman với Reflector.
Tài liệu=https://wiki.archlinux.org/index.php/Reflector
Muốn=mạng-online.mục tiêu
Sau=mạng-online.đích nss-lookup.đích

[Dịch vụ]
Loại=oneshot
ExecStart=/usr/bin/reflector @/etc/xdg/reflector/reflector.conf
CacheDirectory=phản xạ
CapabilityBoundingSet=~CAP_SETUID CAP_SETGID CAP_SETPCAP CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_CHOWN CAP_FSETID CAP_SETFCAP CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_IPC_OWNER CAP_NET_ADMIN CAP_SYS_TIME CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE CAP_KILL CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_NICE CAP_SYS_RESOURCE CAP_MAC_ADMIN CAP_MAC_OVERRIDE CAP_SYS_BOOT CAP_LINUX_IMMUTABLE CAP_IPC_LOCK CAP_SYS_CHROOT CAP_BLOCK_SUSPEND CAP_LEASE CAP_SYS_PACCT CAP_SYS_TTY_CONFIG CAP_WAKE_ALARM
Môi trường=XDG_CACHE_HOME=/var/cache/reflector
LockPersonality=true
MemoryDenyWriteExecute=true
NoNewPrivileges=true
Thiết bị riêng tư=true
RiêngTmp=true
Người dùng riêng tư=true
ProtectClock=true
ProtectControlGroups=true
ProtectHome=true
ProtectHostname=true
ProtectKernelTunables=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectSystem=nghiêm ngặt
ReadOnlyPaths=/etc/xdg/reflector/reflector.conf
ReadWritePaths=/etc/pacman.d/mirrorlist
XóaIPC=true
RestrictAddressFamilies=~AF_AX25 AF_IPX AF_APPLETALK AF_X25 AF_DECnet AF_KEY AF_NETLINK AF_PACKET AF_RDS AF_PPPOX AF_LLC AF_IB AF_MPLS AF_CAN AF_TIPC AF_BLUETOOTH AF_ALG AF_VSOCK AF_KCM AF_UNIX AF_XDP
Hạn chếNamespaces=true
Hạn chếThời gian thực=true
Hạn chếSUIDSGID=true
SystemCallArchitectures=gốc
SystemCallFilter=@system-service
SystemCallFilter=~@resources @privileged
UMask=177

[Cài đặt]
WantedBy=multi-user.target

Mỗi tài liệu, dịch vụ phải được thiết lập chính xác để đợi kết nối mạng được thiết lập (tức là: Tôi đã đăng nhập, Trình quản lý mạng đã kết nối với WiFi và hệ thống đã được chỉ định một IP).

mạng-online.target là mục tiêu tích cực đợi cho đến khi mạng "lên", trong đó định nghĩa "lên" được xác định bởi phần mềm quản lý mạng. Thông thường, nó chỉ ra một số loại địa chỉ IP có thể định tuyến, được định cấu hình. Mục đích chính của nó là chủ động trì hoãn việc kích hoạt các dịch vụ cho đến khi mạng được thiết lập.

Tôi cũng đã chắc chắn rằng NetworkManager-wait-online.service được kích hoạt.

$ systemctl được kích hoạt NetworkManager-wait-online.service systemd-networkd-wait-online.service
kích hoạt
Vô hiệu hóa

Thay vì dịch vụ đợi bắt đầu cho đến khi kết nối internet được thiết lập, tôi thấy lỗi trên bảng điều khiển hệ thống gần như ngay khi tôi thấy lời nhắc đăng nhập của mình.

Ngày 05 tháng 7 07:40:02 tiện ích systemd[1]: Đang bắt đầu Làm mới danh sách nhân bản Pacman với Reflector....
Ngày 05 tháng 7 07:40:03 Bộ phản xạ tiện ích[564]: lỗi: không thể truy xuất dữ liệu mirrorstatus: URLError: <lỗi urlopen [Errno -3] Lỗi tạm thời trong phân giải tên>
Ngày 05 tháng 7 07:40:03 tiện ích systemd[1]:Reflector.service: Quá trình chính đã thoát, mã=đã thoát, trạng thái=1/THẤT BẠI
Ngày 05 tháng 7 07:40:03 tiện ích systemd[1]:Reflector.service: Không thành công với kết quả 'mã thoát'.
Ngày 05 tháng 7 07:40:03 tiện ích systemd[1]: Không thể bắt đầu Làm mới danh sách nhân bản Pacman với Reflector..

Vì nó phải đợi mạng trực tuyến và DNS khả dụng, tôi cũng đã kiểm tra trạng thái của NetworkManager-wait-online.service, mạng-online.targetnss-tra cứu.đích:

$ systemctl status NetworkManager-wait-online.service
â NetworkManager-wait-online.service - Trình quản lý mạng Chờ trực tuyến
     Đã tải: đã tải (/usr/lib/systemd/system/NetworkManager-wait-online.service; đã bật; giá trị đặt sẵn của nhà cung cấp: đã tắt)
     Hoạt động: hoạt động (đã thoát) kể từ Thứ Hai 2021-07-05 07:40:02 CEST; 44 phút trước
       Tài liệu: man:nm-online(1)
   PID chính: 544 (mã=đã thoát, trạng thái=0/THÀNH CÔNG)
      Nhiệm vụ: 0 (giới hạn: 38321)
     Bộ nhớ: 0B
        CPU: 0
     Nhóm C: /system.slice/NetworkManager-wait-online.service

Ngày 05 tháng 7 07:40:02 tiện ích systemd[1]: Đang khởi động Trình quản lý mạng Chờ trực tuyến...
Ngày 05 tháng 7 07:40:02 tiện ích systemd[1]: Đã hoàn thành Trình quản lý mạng Chờ trực tuyến.
$ systemctl status mạng-online.target
â network-online.target - Mạng đang trực tuyến
     Đã tải: đã tải (/usr/lib/systemd/system/network-online.target; tĩnh)
     Đang hoạt động: hoạt động kể từ Thứ Hai 2021-07-05 07:40:02 CEST; 1 giờ 5 phút trước
       Tài liệu: man:systemd.special(7)
             https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget

Ngày 05 tháng 7 07:40:02 tiện ích systemd[1]: Mạng mục tiêu đã tiếp cận đang Trực tuyến.
$ trạng thái systemctl nss-lookup.target
â nss-lookup.target - Tra cứu tên máy chủ và mạng
     Đã tải: đã tải (/usr/lib/systemd/system/nss-lookup.target; tĩnh)
     Đang hoạt động: không hoạt động (đã chết)
       Tài liệu: man:systemd.special(7)

Tôi thấy lạ là NetworkManager-wait-online.service báo cáo kết thúc ngay sau khi bắt đầu. Có cái gì khác tôi cần phải cấu hình? Đây có phải là lỗi trong NetworkManager và/hoặc nm-online không?

Tôi đã tìm các chủ đề tương tự và tìm thấy những câu hỏi sau, nhưng chúng không trả lời được vấn đề của tôi:

Michael Hampton avatar
lá cờ cz
Mặc dù vậy, nó đã đi kèm với các đơn vị systemd của riêng nó! Tại sao không chỉ sử dụng nó?
Điểm:1
lá cờ nc

Ý nghĩa của "mạng trực tuyến" là mơ hồ và mạng trực tuyến. target chỉ hoàn thành ý nghĩa cơ bản nhất có thể có của "mạng trực tuyến". Nhìn thấy https://freedesktop.org/wiki/Software/systemd/NetworkTarget để được giải thích đầy đủ hơn.

Bạn cần xác định chính xác những gì bạn cần thiết lập trong mạng và những dịch vụ nào cần hoạt động để dịch vụ của bạn hoạt động chính xác và thêm những dịch vụ đó dưới dạng phụ thuộc hoặc thêm các thử nghiệm trong trình tự khởi động dịch vụ của bạn để chờ chúng.

Như trang trên nêu rõ ở phần cuối, tốt nhất bạn nên điều chỉnh dịch vụ của mình để có thể xử lý các thay đổi động đối với cấu hình mạng thay vì bị lỗi nếu dịch vụ không hoàn toàn như mong đợi.

Evy Bongers avatar
lá cờ us
Tôi đã liên kết các tài liệu đó và trích dẫn từ chúng: "`mạng-online.target` là mục tiêu tích cực đợi cho đến khi mạng "lên", trong đó định nghĩa "lên" được phần mềm quản lý mạng xác định.Thông thường, nó biểu thị một loại địa chỉ IP có thể định tuyến, được định cấu hình." Vì vậy, nếu tôi hiểu đúng, thì vấn đề là kỳ vọng của tôi về mục tiêu không phù hợp với cách các nhà phát triển Trình quản lý mạng triển khai nó.
user10489 avatar
lá cờ nc
network-online.target có thể cần thiết nhưng không đủ. Có lẽ bạn cũng cần phải kiểm tra xem một tên máy chủ cụ thể có thể phân giải được hay không. Ngoài ra, đây có phải là một lần duy nhất hay thay vào đó, nó có thể đơn giản để nó không chặn phần còn lại của quá trình khởi động hệ thống?
Điểm:-1
lá cờ in

Kiểm tra systemd-resolvd.service để biết Trước=nss-lookup.đích phụ thuộc. Nó sẽ hoạt động.

Sau đó kiểm tra lại để chắc chắn:

systemctl được kích hoạt NetworkManager-wait-online.service systemd-networkd-wait-online.service
Evy Bongers avatar
lá cờ us
`systemd-resolvd.service` có những thứ này được liệt kê: ` Before=network.target nss-lookup.target shutdown.target`. Đã cập nhật câu hỏi ban đầu để bao gồm lệnh.
Evy Bongers avatar
lá cờ us
Suy nghĩ thứ hai, tại sao điều đó có liên quan? Tôi không sử dụng `systemd-resolved.service`.
user10489 avatar
lá cờ nc
Nếu bạn không sử dụng systemd-resolved.service, bạn sẽ sử dụng trình phân giải nào? Có lẽ bạn nên thêm điều đó vào phần phụ thuộc của mình.
Evy Bongers avatar
lá cờ us
Tôi sử dụng NetworkManager để quản lý mạng.Đó là lý do tại sao tôi đã đề cập đến `NetworkManager-wait-online.service` nhiều lần, trái ngược với `systemd-networkd-wait-online.service`.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.