Вклучете ја машината, најавете се и дознајте дека тунелот се крена и умре неколку секунди подоцна. Профилот беше во ред, сертификатот беше во ред, а единствената преостаната трага е журналот од тоа подигање. Она што обично се случило е трка: единицата стартувала пред машината да има адреса, а редот што го декларирала не значел она на што изгледа. Сѐ подолу е за докажување на таа трка од докази и за нејзино правилно затворање.

Целта е место на средба, а не управувач

network-online.target нема поим што е мрежа. Тоа е координациска точка што ја собира таа служба што треба да го одложи стартувањето додека врската не биде употреблива, и ја делегира дефиницијата на оној мрежен менаџер што ја поседува машината. На повеќето десктопи и сервери тоа значи служба за чекање што ја испорачува NetworkManager или systemd-networkd. Ако не вклучите ниту една, целта нема што да чека, па се завршува во моментот кога нешто ќе ја повлече внатре, а тоа може да биде многу пред DHCP да одговори. Редот за распоред во вашата единица беше искрен и сепак бескорисен.

Првото прашање затоа не е што декларира вашата единица. Туку дали нешто на оваа машина навистина го извршува чекањето.

Читајте го последното подигање, а не датотеката на единицата

Датотеките на единиците опишуваат намера, а журналот опишува што се случило. Побарајте само тоа подигање, со монотони временски ознаки за секоја порака да седи на еден часовник. Потоа најдете два реда: моментот кога единицата на тунелот почнала да стартува, и моментот кога се појавила адресата или завршила службата за чекање. Подредете ги тие два броја и трката е или потврдена или исклучена.

Приказот на зависности го потврдува тоа. Ако критичен синџир за единицата на тунелот не содржи служба за чекање, ништо на тој пат не го одложило стартувањето, и целта не ја извршила работата што ја претпоставивте. Два приказа, еден заклучок.

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

Додајте го чекањето, потоа повторувањето

Користете drop-in наместо да уредувате спакувана единица, за да не ја отфрли ажурирањето на пакетот промената тивко. Важни се две директиви: единицата мора да биде подредена по целта и мора да ја повлече целта во истата трансакција. Само подредувањето не ја повикува целта; тоа го прави желбата.

Спакуваната единица на клиентот OpenVPN веќе ги носи двете. Рачно напишаните единици обично носат едно или ниту едно, што вреди да се провери пред да додадете нешто.

[Service]
Restart=on-failure
RestartSec=15

Зошто фиксниот сон е стапица

Сон во ExecStartPre се чувствува како исправка на редот и се однесува како одложување со дополнителни чекори. Го забавува секое подигање, вклучително и оние што беа здрави, и сепак губи кога врската ќе потрае подолго од бројот што го избравте.

Уште полошо, го крие тоа дали службата за чекање работи, па следниот неуспех се претставува како сосема нов проблем, а не истиот со друго време. Краткото одложување на рестартирање е подобриот инструмент: не чини ништо при здраво подигање и ја претвора изгубената трка во уште еден обид. Држете го интервалот скромен и дозволете ѝ на единицата да успее. Ако се рестартира засекогаш, профилот е расипан и ниту една количина на повторувања нема да го смени тоа, затоа читајте го журналот наместо да го покачувате интервалот.

Кога редот е точен, а имињата сѐ уште пропаѓаат

Активна единица со рута за тунелот значи дека редот ја завршил својата работа и преостанатиот дефект е еден слој погоре. Обичната форма е поставка на резолвер што ја применува up-скриптата на тунелот пред врската или резолверот да биде подготвен да ја задржи. Споредете ја состојбата на резолверот за време на неуспехот со состојбата по рестартирање на единицата на тунелот.

Ако рестартирањето ги поправа пребарувањата, имате дефект во редот на стартување, а не погрешен DNS сервер, и тие две бараат различни поправки. Потоа докажете го целото со ладно подигање наместо со рестартирање на службата, бидејќи рестартирањето работи против веќе крената мрежа и точно ќе го скрие дефектот што го бркате. Повторете го со намерно бавна врска и сметајте ја единицата што работи само кога мрежата е брза како сѐ уште расипана.

Поврзани статии