Įjunkite mašiną, prisijunkite ir sužinokite, kad tunelis pakilo ir po kelių sekundžių mirė. Profilis buvo tvarkingas, sertifikatas buvo tvarkingas, o vienintelis likęs pėdsakas yra to įkrovimo žurnalas. Paprastai įvyko lenktynės: padalinys startavo anksčiau, nei mašina turėjo adresą, o tvarka, kurią jis deklaravo, nereiškė to, kaip atrodo. Viskas žemiau – apie tų lenktynių įrodymą iš įrodymų ir tinkamą jų uždarymą.

Tikslas yra susitikimo vieta, o ne valdytojas

network-online.target net neįsivaizduoja, kas yra tinklas. Tai koordinacinis taškas, kuris surenka tą paslaugą, kuri turėtų atidėti paleidimą, kol jungtis taps naudojama, ir perduoda apibrėžimą tam tinklo valdytojui, kuriam priklauso mašina. Daugumoje darbalaukių ir serverių tai reiškia laukimo paslaugą, kurią teikia NetworkManager arba systemd-networkd. Jei neįjungsite nė vienos, tikslui nebus ko laukti, todėl jis baigiamas tą akimirką, kai kažkas jį įtraukia, o tai gali būti gerokai prieš DHCP atsakymą. Tvarkos eilutė jūsų padalinyje buvo sąžininga ir vis tiek nenaudinga.

Taigi pirmas klausimas yra ne tai, ką deklaruoja jūsų padalinys. O tai, ar šioje mašinoje kas nors iš tikrųjų atlieka laukimą.

Skaitykite paskutinį įkrovimą, o ne padalinio failą

Padalinių failai aprašo ketinimą, o žurnalas aprašo, kas įvyko. Paprašykite tik to įkrovimo, su monotoniškais laiko ženklais, kad kiekvienas pranešimas sėdėtų ant vieno laikrodžio. Tada suraskite dvi eilutes: akimirką, kai tunelio padalinys pradėjo startuoti, ir akimirką, kai atsirado adresas arba baigėsi laukimo paslauga. Surikiuokite tuos du skaičius ir lenktynės bus arba patvirtintos, arba atmestos.

Priklausomybių vaizdas tai patvirtina. Jei tunelio padalinio kritinėje grandinėje nėra laukimo paslaugos, niekas tame kelyje neatidėjo paleidimo, o tikslas neatliko darbo, kurį darėte prielaidą. Du vaizdai, viena išvada.

systemctl list-units --type=service --state=running | grep wait-online
journalctl -b -o short-monotonic -u openvpn-client@office

Pridėkite laukimą, tada pakartojimą

Naudokite drop-in, o ne redaguokite supakuotą padalinį, kad paketo atnaujinimas tyliai neatmestų pakeitimo. Svarbios dvi direktyvos: padalinys turi būti surikiuotas po tikslo ir turi įtraukti tikslą į tą pačią transakciją. Vien tvarka tikslo neiššaukia; tai daro noras.

Supakuotas OpenVPN kliento padalinys jau turi abu. Ranka rašyti padaliniai paprastai turi vieną arba nė vieno, ką verta patikrinti prieš ką nors pridedant.

[Service]
Restart=on-failure
RestartSec=15

Kodėl fiksuotas miegas yra spąstai

Miegas ExecStartPre viduje jaučiasi kaip tvarkos taisymas ir elgiasi kaip vėlavimas su papildomais žingsniais. Jis sulėtina kiekvieną įkrovimą, įskaitant tuos, kurie buvo sveiki, ir vis tiek pralaimi, kai jungtis užtrunka ilgiau nei skaičius, kurį pasirinkote.

Dar blogiau, jis paslepia, ar laukimo paslauga veikia, todėl kita klaida pasirodo kaip visiškai nauja problema, o ne ta pati su kitu laiku. Trumpas perkrovimo vėlavimas yra geresnis įrankis: sveiko įkrovimo metu jis nieko nekainuoja ir pralaimėtas lenktynes paverčia dar vienu bandymu. Laikykite intervalą kuklų ir leiskite padaliniui pavykti. Jei jis perkraunamas amžinai, profilis sugadintas ir joks pakartojimų kiekis to nepakeis, todėl skaitykite žurnalą, o ne didinkite intervalą.

Kai tvarka teisinga, o vardai vis tiek nepavyksta

Aktyvus padalinys su tunelio maršrutu reiškia, kad tvarka atliko savo darbą, o likusi klaida yra vienu sluoksniu aukščiau. Įprasta forma yra sprendiklio nustatymas, kurį tunelio up scenarijus pritaiko anksčiau, nei jungtis ar sprendiklis buvo pasiruošę jį išlaikyti. Palyginkite sprendiklio būseną gedimo metu su būsena po tunelio padalinio perkrovimo.

Jei perkrovimas sutvarko užklausas, turite paleidimo tvarkos defektą, o ne neteisingą DNS serverį, ir šie du reikalauja skirtingų pataisų. Tada įrodykite viską šaltu įkrovimu, o ne paslaugos perkrovimu, nes perkrovimas veikia prieš jau pakilusį tinklą ir paslėps būtent tą defektą, kurio ieškote. Pakartokite tai tyčia lėta jungtimi ir laikykite padalinį, kuris veikia tik kai tinklas greitas, vis dar sugedusiu.

Susiję straipsniai