ExecStart нь shell биш: VPN туслах нэгжийг засах
ExecStart програмыг аргументуудтай ажиллуулдаг, shell дамжуулах хоолой биш. Тодорхой хөрвүүлэгч эсвэл жинхэнэ скрипт ашиглаад, дараа нь нэгжийг шалгаж журналыг уншина уу.
Ажиллаж буй командын мөрийг ExecStart руу хуулж, дахин ачаалбал аргументуудыг файлын нэр гэж үзсэнээр нэгж бүтэлгүйтэх эсвэл чимээгүйгээр гарна. systemd-д юу ч эвдээгүй. ExecStart бол аргументуудын жагсаалт, shell биш, тиймээс хоолой, дахин чиглүүлэлт, нөхцөл нь терминалаас гарсан агшинд утгаа алддаг. Shell хаана байх ёстойг шийдээд, юу ажиллах ёстойг яг таг хэлсэн нэгж бичээрэй.
Яагаад ExecStart дахь хоолой юу ч хийдэггүй вэ
Терминалд команд бичихэд shell эхлээд түүнийг задлан шинжилнэ. Энэ нь хоолой байгуулж, дахин чиглүүлэлтэд файл нээж, ямар ч програм эхлэхээс өмнө хувьсагчдыг өргөтгөдөг. systemd үүнийг хийдэггүй: ExecStart-ыг өөрийн дүрмээр хувааж, гарсан програмыг тэдгээр аргументуудтай ажиллуулдаг. Тиймээс > шууд утгаар аргумент болж ирдэг бөгөөд | хоёр процессыг холбохын оронд программд шилжинэ. Нэгж буруу ажиллахгүй байгаа; синтакс өөр зүйл гэсэн юм.
Энэ нь хайхрамжгүй байдал биш, санаатай, учир нь аргументуудыг урьдчилан таамаглахуйц боловсруулах нь нэгжийг шалгах боломжтой болгодог. Shell байна гэж үздэг хүмүүс л гайхдаг.
Юу ажиллаж байгааг яг таг хэлсэн нэгж бичээрэй
Зорилго нь журналд харагдах жижиг нэгжээс эхэлбэл задлан шинжилгээний асуудал туннелийн асуудлаас тусдаа үлдэнэ. Энэ нь зөвхөн хоёртын файлын хувилбарыг мэдээлнэ.
[Unit]
Description=Report the installed OpenVPN version
[Service]
Type=oneshot
ExecStart=/usr/sbin/openvpn --version
StandardOutput=journal
StandardError=journalЗам нь орлуулагч тул бодитоор суулгасан хоёртын файлаар солино уу. Type=oneshot эцэс хүртэл ажилладаг командод тохиромжтой бөгөөд журналын тохиргоо түүний гаралтыг терминалгүй уншиж болох газар байрлуулна. Суулгах хэсэг санаатайгаар байхгүй тул нэгжийг ачаалах үед идэвхжүүлэхийн оронд гараар дууддаг. Эхлүүлэхийн өмнө файлыг шалгаарай, учир нь зааварчилгын нэрэн дэх алдаа замын алдаанаас өөрөөр бүтэлгүйтдэг.
systemd-analyze verify /etc/systemd/system/openvpn-version.service
systemctl start openvpn-version.serviceShell логикийг скриптэд байлга
Туслах үнэхээр нөхцөлт логик шаардвал тэр логикийг скриптэд хийгээд тодорхой дуудна уу. Скриптэд хөрвүүлэгчийн мөр, ажиллуулах зөвшөөрөл, үйлчилгээний мэдээлж болох гарах код хэрэгтэй. /bin/sh -c ийг хашилттай командын хамт ажиллуулах нь ажилладаг ч хашилтын дүрмийг нэгжийн дотор нууж, хяналтыг хүндрүүлдэг. Нэртэй скриптийг гараар туршиж, дараа нь нэгжийг засахгүйгээр сольж болно. Интерактив хэрэглэгчийн shell профайлд найдах хэрэггүй, учир нь үйлчилгээ өөрийн орчноор эхэлдэг.
Харьцангуй зам чухал үед WorkingDirectory тохируулж, орчныг терминалд экспортлохын оронд нэгжийн дэмждэг зааварчилгаагаар дамжуулна уу. Нууцууд хамгаалагдсан файл эсвэл итгэмжлэлд хамаарах бөгөөд журнал бүртгэж болох аргументуудын жагсаалтад биш.
Бодитоор оршиж буй нэгжийг шалгаарай
drop-in файлууд таны зассан гэж санаж буй файлд хүрэлгүйгээр зан төлөвийг өөрчилдөг. Менежер юу ачаалсныг, сүүлийн ажиллагаа юу мэдээлснийг уншаарай.
systemctl cat vpn-helper.service
journalctl -u vpn-helper.service -n 20 --no-pagerНэгжийн дүрслэлд drop-in файлууд ачааллын дарааллаар ордог бөгөөд гэнэтийн ExecStart ихэвчлэн тэндээс ирдэг. Аливаа өөрчлөлтийн дараа менежерийг дахин ачаалж, шинэ тодорхойлолт systemctl cat -ийн хэвлэдэг зүйл мөн эсэхийг баталгаажуулна уу. Журнал яг командын мөр болон гарах төлөвийг харуулдаг, энэ нь аргументын асуудлыг байхгүй хоёртын файл эсвэл зөвшөөрлийн алдаанаас тусгаарладаг. Дараа нь туслах нь одоо байгаа VPN амьдралын мөчлөгт хамаарах уу, эсвэл гарын оношилгоо хэвээр үлдэх ёстой юу гэдгийг шийдээрэй, учир нь хоёр дахь арын туннелийн процесс өрсөлдөгч эзэмшигчийг үүсгэдэг.
Хүсэлтээр зөв гаралт хэвлэдэг нэгж бол сайн эхний чухал үе шат. Энэ нь одоохондоо туннель биш бөгөөд туннель мэт дүр эсгэх ёсгүй.