Score:3

ฉันจะเรียกใช้บริการ systemd หลังจากสร้างการเชื่อมโยงเครือข่ายได้อย่างไร

ธง us

เมื่อไม่นานมานี้ฉันได้ตั้งค่าบริการ systemd ให้ทำงานหลังจากเครือข่ายออนไลน์ ตามเอกสาร. นี่คือไฟล์หน่วย:

[หน่วย]
Description=รีเฟรช Pacman mirrorlist ด้วย Reflector
เอกสาร=https://wiki.archlinux.org/index.php/Reflector
ต้องการ=network-online.target
After=network-online.target nss-lookup.target

[บริการ]
Type=วันช็อต
ExecStart=/usr/bin/reflector @/etc/xdg/reflector/reflector.conf
CacheDirectory=ตัวสะท้อนแสง
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
สภาพแวดล้อม=XDG_CACHE_HOME=/var/แคช/ตัวสะท้อนแสง
LockPersonality=จริง
MemoryDenyWriteExecute=จริง
NoNewPrivileges=จริง
อุปกรณ์ส่วนตัว = จริง
PrivateTmp=จริง
PrivateUsers=จริง
ProtectClock=จริง
ProtectControlGroups=จริง
ProtectHome=จริง
ProtectHostname=จริง
ProtectKernelTunables=จริง
ProtectKernelLogs=จริง
ProtectKernelModules=จริง
ProtectSystem=เข้มงวด
ReadOnlyPaths=/etc/xdg/reflector/reflector.conf
ReadWritePaths=/etc/pacman.d/mirrorlist
ลบIPC=จริง
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
จำกัดเนมสเปซ=จริง
จำกัดเรียลไทม์=จริง
จำกัดSUIDSGID=จริง
SystemCallArchitectures=เนทีฟ
SystemCallFilter=@บริการระบบ
SystemCallFilter=~@resources @privileged
UMask=177

[ติดตั้ง]
WantedBy=multi-user.target

ต่อ เอกสารควรตั้งค่าบริการอย่างถูกต้องแล้วเพื่อรอการเชื่อมต่อเครือข่าย (เช่น ฉันเข้าสู่ระบบ NetworkManager เชื่อมต่อกับ WiFi และระบบได้รับการกำหนด IP)

network-online.target เป็นเป้าหมายที่รอจนกว่าเครือข่ายจะ "ขึ้น" ซึ่งคำจำกัดความของ "ขึ้น" ถูกกำหนดโดยซอฟต์แวร์การจัดการเครือข่าย โดยปกติจะระบุที่อยู่ IP ที่กำหนดเส้นทางได้บางชนิด จุดประสงค์หลักคือการชะลอการเปิดใช้งานบริการจนกว่าเครือข่ายจะได้รับการตั้งค่า

ฉันยังแน่ใจว่า NetworkManager-รอออนไลน์บริการ เปิดใช้งาน.

$ systemctl เปิดใช้งาน NetworkManager-wait-online.service systemd-networkd-wait-online.service
เปิดใช้งาน
พิการ

แทนที่จะรอบริการให้เริ่มทำงานจนกระทั่งมีการเชื่อมต่ออินเทอร์เน็ต ฉันเห็นข้อผิดพลาดบนคอนโซลระบบเกือบจะทันทีที่ฉันเห็นข้อความแจ้งการเข้าสู่ระบบ

05 ก.ค. 07:40:02 ระบบแกดเจ็ต systemd [1]: กำลังเริ่มต้นรีเฟรช Pacman mirrorlist ด้วย Reflector....
05 ก.ค. 07:40:03 ตัวสะท้อนแสงแกดเจ็ต [564]: ข้อผิดพลาด: ล้มเหลวในการดึงข้อมูลสถานะมิเรอร์: URLError: <ข้อผิดพลาด urlopen [Errno -3] ความล้มเหลวชั่วคราวในการแก้ไขชื่อ>
05 ก.ค. 07:40:03 โปรแกรมเบ็ดเตล็ด systemd [1]: ตัวสะท้อนแสง บริการ: ออกจากกระบวนการหลัก รหัส = ออก สถานะ = 1 / ล้มเหลว
5 ก.ค. 07:40:03 น. gadget systemd [1]: reflector.service: ล้มเหลวด้วยผลลัพธ์ 'exit-code'
5 ก.ค. 07:40:03 น. gadget systemd [1]: ไม่สามารถเริ่มรีเฟรช Pacman mirrorlist ด้วย Reflector..

เนื่องจากควรรอให้เครือข่ายออนไลน์และ DNS พร้อมใช้งาน ฉันจึงตรวจสอบสถานะของด้วย NetworkManager-รอออนไลน์บริการ, network-online.target และ nss-lookup.target:

$ systemctl สถานะ NetworkManager-wait-online.service
â NetworkManager-wait-online.service - ตัวจัดการเครือข่ายรอออนไลน์
     โหลดแล้ว: โหลดแล้ว (/usr/lib/systemd/system/NetworkManager-wait-online.service; เปิดใช้งาน; การตั้งค่าล่วงหน้าของผู้ขาย: ปิดใช้งาน)
     ใช้งานอยู่: ใช้งานอยู่ (ออก) ตั้งแต่วันจันทร์ที่ 2021-07-05 07:40:02 CEST; 44 นาทีที่แล้ว
       เอกสาร: man:nm-online(1)
   PID หลัก: 544 (รหัส=ออก สถานะ=0/สำเร็จ)
      งาน: 0 (จำกัด: 38321)
     หน่วยความจำ: 0B
        ซีพียู: 0
     CGroup: /system.slice/NetworkManager-wait-online.service

05 ก.ค. 07:40:02 น. gadget systemd[1]: การเริ่มต้นตัวจัดการเครือข่ายรอออนไลน์...
05 ก.ค. 07:40:02 โปรแกรมเบ็ดเตล็ด systemd [1]: เสร็จสิ้น Network Manager Wait Online
$ systemctl สถานะ network-online.target
â network-online.target - เครือข่ายออนไลน์
     โหลดแล้ว: โหลดแล้ว (/usr/lib/systemd/system/network-online.target; คงที่)
     ใช้งานอยู่: ใช้งานตั้งแต่วันจันทร์ที่ 2021-07-05 07:40:02 CEST; 1 ชม. 5 นาทีที่แล้ว
       เอกสาร: man:systemd.special(7)
             https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget

05 ก.ค. 07:40:02 ระบบแกดเจ็ต systemd [1]: ถึงเป้าหมายแล้ว เครือข่ายออนไลน์
$ systemctl สถานะ nss-lookup.target
â nss-lookup.target - การค้นหาชื่อโฮสต์และเครือข่าย
     โหลดแล้ว: โหลดแล้ว (/usr/lib/systemd/system/nss-lookup.target; คงที่)
     ใช้งาน: ไม่ใช้งาน (ตาย)
       เอกสาร: man:systemd.special(7)

มันทำให้ฉันแปลกที่ NetworkManager-รอออนไลน์บริการ รายงานเสร็จสิ้นทันทีหลังจากเริ่มต้น มีอะไรอีกบ้างที่ฉันต้องกำหนดค่า? นี่เป็นข้อบกพร่องใน NetworkManager และ/หรือ nm-online หรือไม่

ฉันได้ค้นหาหัวข้อที่คล้ายกันและพบคำถามเหล่านี้ แต่พวกเขาไม่ได้ตอบคำถามของฉัน:

Michael Hampton avatar
cz flag
มันมาพร้อมกับหน่วย systemd ของตัวเองแล้ว! ทำไมไม่ใช้แค่นั้น?
Score:1
ธง nc

ความหมายของ "เครือข่ายออนไลน์" นั้นคลุมเครือและ network-online.target เป็นเพียงการเติมเต็มความหมายพื้นฐานที่เป็นไปได้ของ "เครือข่ายออนไลน์" เท่านั้น ดู https://freedesktop.org/wiki/Software/systemd/NetworkTarget เพื่อคำอธิบายที่สมบูรณ์ยิ่งขึ้น

คุณต้องกำหนดอย่างแม่นยำว่าคุณต้องการอะไรในเครือข่ายและบริการใดที่จำเป็นในการทำงานเพื่อให้บริการของคุณทำงานได้อย่างถูกต้อง และเพิ่มสิ่งเหล่านั้นเป็นการพึ่งพา หรือเพิ่มการทดสอบในลำดับการเริ่มต้นบริการของคุณเพื่อรอ

ตามที่หน้าด้านบนระบุไว้ในตอนท้าย วิธีที่ดีที่สุดคือการปรับบริการของคุณให้สามารถจัดการกับการเปลี่ยนแปลงแบบไดนามิกในการกำหนดค่าเครือข่าย แทนที่จะล้มเหลวหากไม่เป็นไปตามที่คาดไว้ทั้งหมด

Evy Bongers avatar
us flag
ฉันได้เชื่อมโยงเอกสารเหล่านั้นแล้วและอ้างอิงจากเอกสารเหล่านั้น: "`network-online.target` เป็นเป้าหมายที่รอจนกว่าเครือข่ายจะ "ขึ้น" ซึ่งคำจำกัดความของ "up" ถูกกำหนดโดยซอฟต์แวร์การจัดการเครือข่ายโดยปกติจะระบุที่อยู่ IP ที่กำหนดเส้นทางได้บางชนิด" ดังนั้น หากฉันเข้าใจถูกต้อง ปัญหาคือความคาดหวังของฉันที่มีต่อเป้าหมายไม่สอดคล้องกับวิธีที่นักพัฒนา NetworkManager นำมาใช้
user10489 avatar
nc flag
network-online.target อาจจำเป็น แต่ไม่เพียงพอ บางทีคุณอาจต้องทดสอบด้วยว่าชื่อโฮสต์เฉพาะนั้นสามารถแก้ไขได้หรือบางอย่าง นอกจากนี้ จำเป็นต้องเป็นแบบ oneshot หรือสามารถเป็นแบบง่ายๆ แทนเพื่อไม่ให้บล็อกการเริ่มต้นระบบที่เหลือ
Score:-1
ธง in

ตรวจสอบ systemd-resolvd.service สำหรับ ก่อน = nss-lookup.target การพึ่งพา มันควรจะทำงาน

จากนั้นตรวจสอบอีกครั้งเพื่อความแน่ใจ:

systemctl เปิดใช้งาน NetworkManager-wait-online.service systemd-networkd-wait-online.service
Evy Bongers avatar
us flag
`systemd-resolvd.service` มีรายการเหล่านี้: `Before=network.target nss-lookup.target shutdown.target` อัปเดตคำถามเดิมเพื่อรวมคำสั่ง
Evy Bongers avatar
us flag
ในความคิดที่สองทำไมมันถึงเกี่ยวข้องกัน? ฉันไม่ได้ใช้ `systemd-resolved.service`
user10489 avatar
nc flag
หากคุณไม่ได้ใช้ systemd-resolved.service คุณใช้ตัวแก้ไขอะไร บางทีคุณควรเพิ่มสิ่งนั้นในการพึ่งพาของคุณ
Evy Bongers avatar
us flag
ฉันใช้ NetworkManager สำหรับการจัดการเครือข่ายนั่นเป็นเหตุผลที่ฉันพูดถึง `NetworkManager-wait-online.service` หลายครั้ง ตรงกันข้ามกับ `systemd-networkd-wait-online.service`

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา