Puncte:3

Cum pot rula un serviciu systemd după ce a fost stabilită legătura de rețea?

drapel us

Cu ceva timp în urmă am configurat un serviciu systemd pentru a rula după ce rețeaua este online conform documentatiei. Acesta este fișierul unitar:

[Unitate]
Descriere=Reîmprospătează lista de oglindă Pacman cu Reflector.
Documentație=https://wiki.archlinux.org/index.php/Reflector
Wants=network-online.target
După=network-online.target nss-lookup.target

[Serviciu]
Type=onehot
ExecStart=/usr/bin/reflector @/etc/xdg/reflector/reflector.conf
CacheDirectory=reflector
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
Environment=XDG_CACHE_HOME=/var/cache/reflector
LockPersonality=adevărat
MemoryDenyWriteExecute=true
NoNewPrivileges=adevărat
PrivateDevices=true
PrivateTmp=adevărat
PrivateUsers=adevărat
ProtectClock=adevărat
ProtectControlGroups=true
ProtectHome=adevarat
ProtectHostname=true
ProtectKernelTunables=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectSystem=strict
ReadOnlyPaths=/etc/xdg/reflector/reflector.conf
ReadWritePaths=/etc/pacman.d/mirrorlist
RemoveIPC=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_BLUEAFTOAFGFOTHK_BLUEAFTOAFGDP_ AF_BLUEAFTOAFGDPX_
RestrictNamespaces=true
RestrictRealtime=true
RestrictSUIDSGID=adevărat
SystemCallArchitectures=nativ
SystemCallFilter=@system-service
SystemCallFilter=~@resurse @privilegiate
UMask=177

[Instalare]
WantedBy=multi-user.target

Pe documentatia, serviciul ar trebui să fie deja configurat corect pentru a aștepta stabilirea conexiunii la rețea (adică: sunt conectat, NetworkManager s-a conectat la WiFi și sistemului i s-a atribuit un IP).

network-online.target este o țintă care așteaptă activ până când rețeaua este „în sus”, unde definiția „sus” este definită de software-ul de gestionare a rețelei. De obicei, indică o adresă IP configurată, rutabilă. Scopul său principal este de a întârzia activ activarea serviciilor până când rețeaua este configurată.

M-am asigurat și de asta NetworkManager-wait-online.service este activat.

$ systemctl este activat NetworkManager-wait-online.service systemd-networkd-wait-online.service
activat
dezactivat

În loc ca serviciul să aștepte să pornească până când a fost stabilită o conexiune la internet, văd o eroare pe consola sistemului aproape imediat ce îmi văd promptul de conectare.

05 iulie 07:40:02 gadget systemd[1]: Se pornește actualizarea listei de oglindă Pacman cu Reflector....
05 iulie 07:40:03 gadget reflector[564]: eroare: nu s-a putut prelua datele de stare oglindă: URLError: <eroare urlopen [Errno -3] Eroare temporară în rezoluția numelui>
05 iulie 07:40:03 gadget systemd[1]: reflector.service: Proces principal ieșit, cod=ieșit, stare=1/Eșec
05 iulie 07:40:03 gadget systemd[1]: reflector.service: a eșuat cu rezultatul „exit-code”.
05 iulie 07:40:03 gadget systemd[1]: Nu s-a pornit Actualizarea listei de oglindă Pacman cu Reflector..

Deoarece ar trebui să aștepte ca rețeaua să fie online și DNS-ul să fie disponibil, am verificat și starea NetworkManager-wait-online.service, network-online.target și nss-lookup.target:

$ systemctl status NetworkManager-wait-online.service
â NetworkManager-wait-online.service - NetworkManager Wait Online
     Încărcat: încărcat (/usr/lib/systemd/system/NetworkManager-wait-online.service; activat; prestabilit furnizor: dezactivat)
     Activ: activ (ieșit) din Luni 2021-07-05 07:40:02 CEST; acum 44 de minute
       Documente: man:nm-online(1)
   PID principal: 544 (cod=ieșit, stare=0/SUCCESS)
      Sarcini: 0 (limită: 38321)
     Memorie: 0B
        CPU: 0
     CGroup: /system.slice/NetworkManager-wait-online.service

05 iulie 07:40:02 gadget systemd[1]: Se pornește Network Manager Wait Online...
05 iulie 07:40:02 gadget systemd[1]: Manager de rețea finalizat, așteptați online.
$ systemctl status network-online.target
â network-online.target - Rețeaua este online
     Încărcat: încărcat (/usr/lib/systemd/system/network-online.target; static)
     Activ: activ din Luni 2021-07-05 07:40:02 CEST; acum 1h 5min
       Documente: man:systemd.special(7)
             https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget

05 iulie 07:40:02 gadget systemd[1]: Rețeaua țintă atinsă este online.
$ systemctl status nss-lookup.target
â nss-lookup.target - Căutări de nume de gazdă și rețea
     Încărcat: încărcat (/usr/lib/systemd/system/nss-lookup.target; static)
     Activ: inactiv (mort)
       Documente: man:systemd.special(7)

Mi se pare ciudat NetworkManager-wait-online.service rapoartele s-au terminat imediat după pornire. Mai trebuie să configurez ceva? Este aceasta o eroare în NetworkManager și/sau nm-online?

Am căutat subiecte similare și am găsit aceste întrebări, dar nu răspund la problema mea:

Michael Hampton avatar
drapel cz
Totuși, vine deja cu propriile unități de sistem! De ce să nu folosești asta?
Puncte:1
drapel nc

Semnificația „rețea online” este nebuloasă și network-online.target îndeplinește doar cele mai elementare semnificații posibile ale „rețea online”. Vedea https://freedesktop.org/wiki/Software/systemd/NetworkTarget pentru o explicație mai completă.

Trebuie să determinați exact ce aveți nevoie pentru a fi în rețea și ce servicii trebuie să funcționeze pentru ca serviciul dumneavoastră să funcționeze corect și fie să le adăugați ca dependențe, fie să adăugați teste în secvența de pornire a serviciului pentru a le aștepta.

După cum se arată în pagina de mai sus la sfârșit, cel mai bine ar fi să vă ajustați serviciul pentru a putea gestiona modificările dinamice ale configurației rețelei, mai degrabă decât să eșueze dacă nu este în totalitate conform așteptărilor.

Evy Bongers avatar
drapel us
Am legat deja acele documente și am citat din ele: „`network-online.target` este o țintă care așteaptă activ până când rețeaua este „sus”, unde definiția lui „sus” este definită de software-ul de gestionare a rețelei.De obicei, indică o adresă IP configurată, rutabilă.” Deci, dacă înțeleg corect, problema este că așteptările mele de la țintă nu se aliniază cu modul în care dezvoltatorii NetworkManager au implementat-o.
user10489 avatar
drapel nc
network-online.target poate fi necesar, dar nu suficient. Poate că trebuie să testați, de asemenea, că un anumit nume de gazdă poate fi rezolvat sau ceva. De asemenea, acesta trebuie să fie unul singur sau poate fi simplu, astfel încât să nu blocheze restul pornirii sistemului?
Puncte:-1
drapel in

Verificați systemd-resolvd.service pentru Înainte=nss-lookup.target dependenţă. Ar trebui să funcționeze.

Apoi verificați din nou pentru a vă asigura că:

systemctl este activat NetworkManager-wait-online.service systemd-networkd-wait-online.service
Evy Bongers avatar
drapel us
`systemd-resolvd.service` are următoarele listate: `Before=network.target nss-lookup.target shutdown.target`. S-a actualizat întrebarea inițială pentru a include comanda.
Evy Bongers avatar
drapel us
Dacă te gândești bine, de ce ar fi legat asta? Nu folosesc `systemd-resolved.service`.
user10489 avatar
drapel nc
Dacă nu utilizați systemd-resolved.service, ce soluție folosiți? Poate ar trebui să adăugați asta la dependențele dvs.
Evy Bongers avatar
drapel us
Folosesc NetworkManager pentru gestionarea rețelei.De aceea am menționat de mai multe ori `NetworkManager-wait-online.service`, spre deosebire de `systemd-networkd-wait-online.service`.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.