Evy*_*ers 5 linux systemd systemd-service
不久前,我根据文档设置了一个 systemd 服务,以便在网络上线后运行。\n这是单元文件:
\n[Unit]\nDescription=Refresh Pacman mirrorlist with Reflector.\nDocumentation=https://wiki.archlinux.org/index.php/Reflector\nWants=network-online.target\nAfter=network-online.target nss-lookup.target\n\n[Service]\nType=oneshot\nExecStart=/usr/bin/reflector @/etc/xdg/reflector/reflector.conf\nCacheDirectory=reflector\nCapabilityBoundingSet=~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\nEnvironment=XDG_CACHE_HOME=/var/cache/reflector\nLockPersonality=true\nMemoryDenyWriteExecute=true\nNoNewPrivileges=true\nPrivateDevices=true\nPrivateTmp=true\nPrivateUsers=true\nProtectClock=true\nProtectControlGroups=true\nProtectHome=true\nProtectHostname=true\nProtectKernelTunables=true\nProtectKernelLogs=true\nProtectKernelModules=true\nProtectSystem=strict\nReadOnlyPaths=/etc/xdg/reflector/reflector.conf\nReadWritePaths=/etc/pacman.d/mirrorlist\nRemoveIPC=true\nRestrictAddressFamilies=~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\nRestrictNamespaces=true\nRestrictRealtime=true\nRestrictSUIDSGID=true\nSystemCallArchitectures=native\nSystemCallFilter=@system-service\nSystemCallFilter=~@resources @privileged\nUMask=177\n\n[Install]\nWantedBy=multi-user.target\n
Run Code Online (Sandbox Code Playgroud)\n根据文档,该服务应该已正确设置以等待建立网络连接(即:我已登录,NetworkManager 已连接到 WiFi 并且系统已分配了 IP)。
\n\n\n\n
network-online.target
是一个主动等待网络“up”的目标,其中“up”的定义由网络管理软件定义。通常它表示某种已配置的、可路由的 IP 地址。其主要目的是主动延迟服务的激活,直到网络建立为止。
我还确保该功能NetworkManager-wait-online.service
已启用。
$ systemctl is-enabled NetworkManager-wait-online.service systemd-networkd-wait-online.service\nenabled\ndisabled\n
Run Code Online (Sandbox Code Playgroud)\n我几乎一看到登录提示就在系统控制台上看到错误,而不是等待建立互联网连接才启动服务。
\nJul 05 07:40:02 gadget systemd[1]: Starting Refresh Pacman mirrorlist with Reflector....\nJul 05 07:40:03 gadget reflector[564]: error: failed to retrieve mirrorstatus data: URLError: <urlopen error [Errno -3] Temporary failure in name resolution>\nJul 05 07:40:03 gadget systemd[1]: reflector.service: Main process exited, code=exited, status=1/FAILURE\nJul 05 07:40:03 gadget systemd[1]: reflector.service: Failed with result \'exit-code\'.\nJul 05 07:40:03 gadget systemd[1]: Failed to start Refresh Pacman mirrorlist with Reflector..\n
Run Code Online (Sandbox Code Playgroud)\n由于它应该等待网络上线并且 DNS 可用,因此我还检查了NetworkManager-wait-online.service
、network-online.target
和 的状态nss-lookup.target
:
$ systemctl status NetworkManager-wait-online.service\n\xe2\x97\x8f NetworkManager-wait-online.service - Network Manager Wait Online\n Loaded: loaded (/usr/lib/systemd/system/NetworkManager-wait-online.service; enabled; vendor preset: disabled)\n Active: active (exited) since Mon 2021-07-05 07:40:02 CEST; 44min ago\n Docs: man:nm-online(1)\n Main PID: 544 (code=exited, status=0/SUCCESS)\n Tasks: 0 (limit: 38321)\n Memory: 0B\n CPU: 0\n CGroup: /system.slice/NetworkManager-wait-online.service\n\nJul 05 07:40:02 gadget systemd[1]: Starting Network Manager Wait Online...\nJul 05 07:40:02 gadget systemd[1]: Finished Network Manager Wait Online.\n$ systemctl status network-online.target\n\xe2\x97\x8f network-online.target - Network is Online\n Loaded: loaded (/usr/lib/systemd/system/network-online.target; static)\n Active: active since Mon 2021-07-05 07:40:02 CEST; 1h 5min ago\n Docs: man:systemd.special(7)\n https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget\n\nJul 05 07:40:02 gadget systemd[1]: Reached target Network is Online.\n$ systemctl status nss-lookup.target\n\xe2\x97\x8b nss-lookup.target - Host and Network Name Lookups\n Loaded: loaded (/usr/lib/systemd/system/nss-lookup.target; static)\n Active: inactive (dead)\n Docs: man:systemd.special(7)\n
Run Code Online (Sandbox Code Playgroud)\n令我感到奇怪的是,NetworkManager-wait-online.service
报告刚开始就结束了。我还需要配置其他东西吗?这是 NetworkManager 和/或 nm-online 中的错误吗?
我寻找了类似的主题并发现了这些问题,但它们没有回答我的问题:
\nGed*_*RSU -1
检查 systemd-resolvd.service 的Before=nss-lookup.target
依赖性。它应该有效。
然后再次检查以确保:
systemctl is-enabled NetworkManager-wait-online.service systemd-networkd-wait-online.service
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11225 次 |
最近记录: |