Нэг улсын дөч .ovpn файл нийлүүлэгчээс ирдэг бөгөөд төлөвлөгөө нь тодорхой харагдаж байна: санамсаргүй нэгийг байранд нь хуулж, дараа нь туннелийг эхлүүлэх. Үүнийг ExecStart дотор дамжуулах хоолой болгон бичихэд тэр төлөвлөгөө ачаалах үед юу ч тайлбарлахгүй төлөвийн кодтой үхдэг. Нэгжийн файл нь скрипт биш бөгөөд засвар нь shell-ийг тодорхой оруулах эсвэл файл сонгохыг бүрмөсөн зогсоох юм.

Шинж тэмдэг: эхэлсэн даруйдаа үхдэг нэгж

Төлөв нь үйлчилгээ секундын багахан хэсэгт бүтэлгүйтсэнийг харуулж, журналын мөр нь ямар ч shell хүлээж авахгүй байсан командыг нэрлэнэ. Туннелийн тухай юу ч харагдахгүй, учир нь туннель огт эхлээгүй.

Журналаас яг командын мөрийг унших нь үүнийг батлах хамгийн хурдан арга юм. systemd гүйцэтгэсэн зүйлээ давтаж, мөр нь хоолойн тэмдэгтүүдийг оператор биш, шууд утгаар аргумент болгон харуулна.

ExecStart яагаад хоолойг ажиллуулж чадахгүй вэ

systemd командын мөрийг өөрөө хувааж, өөрийн хашилт болон хувьсагчийн орлуулалтыг хэрэглээд, дараа нь үр дүнг шууд гүйцэтгэдэг. Хоолой, дахин чиглүүлэлт, shell-ийн глоб өргөтгөл, командын орлуулалт нь энэ дүрмийн нэг хэсэг биш юм. Энэ нь орхигдол биш, дизайны сонголт юм: нэгж юу ажиллуулахыг тунхаглаж хэлдэг, shell-ийн логик нь нэгж дууддаг скриптэд хамаарна. Хоёр засвар хоёулаа үүнээс үүдэлтэй бөгөөд аль нь ч нэгжид илүү их эрх өгөх шаардлагагүй.

Энэ нь төөрөгдүүлсэн гарах кодыг ч тайлбарладаг. Эхний аргументыг хоёртын файл гэж үздэг тул буруу мөр таны логикийн аль ч хэсэг ажиллахаас өмнө бүтэлгүйтдэг.

Сонголтыг ExecStartPre дотор хий

Шууд засвар нь shell-ийг тодорхой дууддаг бэлтгэл алхам бөгөөд сонголт болон эхлэлийг нэг нэгжид байлгаж, нэгнийх нь алдаа нөгөөг ганцаараа ажиллуулахыг зөвшөөрөхгүй.

[Service]
Type=notify
ExecStartPre=/bin/bash -c "ls /etc/openvpn/profiles/au* | shuf -n 1 | xargs -r -I{} cp -f {} /etc/openvpn/%i.conf"
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf

Гурван нарийн ширийн зүйл энэ нь жинхэнэ машинтай харьцахад тэсвэрлэх эсэхийг шийднэ. Нэрлэлт нь эхний урхи: systemd нэгжийг задлан шинжлэх үед, bash ажиллахаас хамаагүй өмнө %i-ийг орлуулдаг тул тодорхойлогч нь ганц хашилтаас гадна байх ёстой. xargs -r глоб ямар ч зүйлтэй тохирохгүй үед cp-ийг аргументгүй ажиллахаас сэргийлдэг. Харин бүтэлгүйтсэн бэлтгэл алхам нэгжийг зогсоодог бөгөөд энэ нь зөв үр дүн юм: өчигдрийн тохиргоотой эхлэх нь эхлэхгүй байснаас дор. Үргэлж ижил файлыг авдаг санамсаргүй сонголт нь ихэвчлэн азгүй явдал биш. Хуулсан файлыг багцын шинэчлэл дарж бичиж байгаа эсэх, эсвэл глоб зөвхөн нэг хуучирсан бичлэгтэй тохирч байгаа эсэхийг шалга.

Эсвэл OpenVPN өөрөө төгсгөлийн цэгийг сонго

OpenVPN аль хэдийн нэг профайлд хэд хэдэн төгсгөлийн цэг хадгалж, тэдгээрийн дундаас санамсаргүй сонгож чаддаг бөгөөд энэ нь shell, хуулбар, бичих эрхийг ачаалах замаас бүрэн хасдаг.

client
remote-random
<connection>
remote au1.example.net 1194 udp
</connection>
<connection>
remote au2.example.net 1194 udp
</connection>

Энэ хэлбэр нь серверийн сонголтыг нийлүүлэгчийн бичсэн файл дотор байлгадаг тул файлын нэрийг өөрчилдөг эргэлт нэгжийг эвдэхгүй. Мөн энэ нь нэр дэвшигчдийн жагсаалтыг хянагдахуйц болгодог бөгөөд лавлах дээрх глоб хэзээ ч тийм байдаггүй. Профайлууд төгсгөлийн цэгээс илүү зүйлээр ялгаатай үед холих нь байраа хадгалдаг: өөр гэрчилгээ, өөр чиглүүлэлтийн заавар, өөр шифр бодлого. Тэр тохиолдолд сонголт нь бүхэл тохиргоонуудын хооронд байх бөгөөд shell-ийн алхам нь үүнийг илэрхийлэх шударга арга юм.

Ашигласан инстанц болон файлыг буцааж унш

Агуулгыг нь дибаг хийхээс өмнө аль нэгж үнэхээр ажиллаж байгааг батал. Багцлагдсан мета үйлчилгээ болон загвар нь дэд бүтэц; таны файлуудад тохирох нэгжүүд нь тэдний нэрээр нэрлэгдсэн инстанцууд юм.

systemctl list-units 'openvpn*'
systemctl cat [email protected]
journalctl -u openvpn@au -n 30 --no-pager

Хэн ч идэвхжүүлснээ санадаггүй инстанц нь ихэвчлэн багцын лавлах дахь төөрсөн тохиргооны файл руу хүргэдэг. Загварыг бус, тэр нэртэй инстанцыг унтраа, эс бөгөөс дараагийн багцын шинэчлэл түүнийг буцааж авчирна. Өөрчлөлтийн дараа нэгжийг эхлүүлж, журнал мэдээлж буй командын мөрийг уншаад, дараа нь түүний үнэхээр нээсэн тохиргооны замыг батал. Тэр нэг шалгалт ажиллаж буй санамсаргүй сонголтыг өнгөрсөн сарын файлыг чимээгүй дахин ашиглаж буй үйлчилгээнээс ялгадаг.

Холбоотой нийтлэлүүд