დავალება ირთვება შესვლისას, ჟურნალი აჩვენებს კლიენტის გაშვებას, მაგრამ გვირაბი არასდროს ადის. ან ადის და რამდენიმე წამში ქრება. ორივე შემთხვევაში თვისებების სია, სავარაუდოდ, სწორი იყო. launchd ორი დაპირება მისცა, როცა დავალება მიიღო: ის ზედამხედველობას გაუწევს პროცესს და ეს პროცესი განაგრძობს მუშაობას. VPN-ს ორივე სჭირდება და სწორი XML ფაილი არცერთს არ იძლევა.

სწორი თვისებების სია ჯერ არ ნიშნავს მომუშავე სერვისს

plutil -lint ამოწმებს სტრუქტურას. მას არ შეუძლია გითხრათ, არსებობს თუ არა ბინარული ფაილი, მხარს უჭერს თუ არა არგუმენტებს კლიენტის ეს ვერსია, ან იწყება თუ არა დავალება იმ კონტექსტში, სადაც სერთიფიკატები ხელმისაწვდომია. ეს სემანტიკური კითხვებია და სწორედ ისინი ხსნიან იმ წარუმატებლობების უმეტესობას, რომლებიც launchd-ის პრობლემებად გვეჩვენება.

plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn

წაიკითხეთ მეორე ბრძანების გამონატანი და ნუ ჩათვლით, რომ დავალება ჩაიტვირთა. ის იუწყება ბოლო გასვლის სტატუსს და იმას, მუშაობს თუ არა სერვისი, რაც განასხვავებს „არასდროს გაშვებულს“ „გაშვებულ და მკვდარს“ პროფილის შეხებამდე.

აგენტები მემკვიდრეობით იღებენ მომხმარებლის სესიას, დემონები — არა

Apple-ის launchd-ის დოკუმენტაცია გამოყოფს მომხმარებლის აგენტებს სისტემური დემონებისგან. აგენტი მუშაობს შესული მომხმარებლის კონტექსტში, მისი გასაღების რგოლითა და გარემოთი. დემონი მუშაობს ამ სესიის გარეშე და დავალების სისტემურ საქაღალდეში გადატანა ხელახლა არ ქმნის მომხმარებლის ინტერაქტიულ სერთიფიკატებს.

ეს განსხვავება წყვეტს დიზაინს. თუ კავშირი მოითხოვს ადამიანის შესვლას ან MFA მოთხოვნის დამტკიცებას, მხარდაჭერილი გზაა მომხმარებლის სესიის დავალება, რომელიც შესვლის შემდეგ ირთვება. თუ ის უნდა მუშაობდეს მაშინ, როცა არავინ არის შესული, კლიენტს სჭირდება დამტკიცებული უყურადღებო იდენტობა, საკუთარი განახლებისა და გაუქმების პროცესით. არასწორი სტრიქონის არჩევა ქმნის დავალებას, რომელიც სუფთად ირთვება და პირველივე აუთენტიფიკაციის საფეხურზე ფარდება.

ნუ დაფარავთ ამ განსხვავებას არგუმენტების მასივში ჩადებული პაროლით ან სერთიფიკატების შემოწმების გამორთვით. ორივე აუთენტიფიკაციის მოთხოვნას აქცევს წაკითხულ ფაილში მუდმივ საიდუმლოდ, ხოლო მეორე ნიშნავს, რომ გვირაბი აუთენტიფიცირებს ყველაფერს, რაც პასუხობს.

ზედამხედველობა მუშაობს მხოლოდ მაშინ, როცა პროცესი წინა პლანზე რჩება

კლიენტი, რომელიც თავად იქცევა დემონად, კონტროლს დაუყოვნებლივ უბრუნებს launchd-ს და ზედამხედველი შემდეგ უკვე დასრულებულ პროცესს აკვირდება. გვირაბი შეიძლება აწეული იყოს, მაგრამ launchd ფიქრობს, რომ დავალება ჩავარდა და მისი გადატვირთვის პოლიტიკა იმას გააკეთებს, რაც არ გინდოდათ.

გამოიყენეთ კლიენტის დოკუმენტირებული წინა პლანის ან სერვისის რეჟიმი. თუ პროდუქტს აქვს საკუთარი მხარდაჭერილი გაშვების ფუნქცია, მან უკვე იცის, როგორ დარჩეს წინა პლანზე და როგორ გადასცეს ქსელურ სტეკს; მორგებული დავალება ცალკე დიზაინია და არა მისი გაუმჯობესება.

მიეცით დავალებას უნიკალური ლეიბლი, განზრახული შესრულებადი ფაილი და გააზრებული არგუმენტების მასივი. მასივი არ არის shell-ის ბრძანების სტრიქონი, ამიტომ მილები და გადამისამართებები იქ არ მუშაობს და ბრჭყალების ქცევა სხვაგვარია. ბრძანება, რომელიც ადმინისტრატორის ტერმინალში წარმატდება, საუკეთესო შემთხვევაში წინასწარი შემოწმებაა.

სერთიფიკატები უნდა მუშაობდეს მოთხოვნის გარეშე

უყურადღებო ექსპლუატაცია სერთიფიკატის პრობლემას გადაადგილებს და არ აქრობს. ვიღაც უნდა ფლობდეს იდენტობას, გადაწყვიტოს რამდენ ხანს იცოცხლებს და დააფიქსიროს, როგორ იცვლება. ვადის მონიტორინგის გარეშე სერთიფიკატი კალენდარზე თარიღიან გათიშვად იქცევა.

დააშორეთ საიდუმლოებები არგუმენტებს და დავალების სტანდარტულ გამონატანს. თუ კლიენტი მხარს უჭერს სერთიფიკატის წაკითხვას დაცული საცავიდან, გამოიყენეთ ეს გზა და შეამოწმეთ, რომ დავალების შესრულების კონტექსტს შეუძლია საცავამდე მისვლა. root-ით მომუშავე დემონი, როგორც წესი, ვერ კითხულობს შესვლის გასაღების რგოლის ელემენტს და ეს ისეთი დეტალია, რომელიც მხოლოდ სისტემურ კონტექსტში ჩანს.

განსაზღვრეთ, რას ნიშნავს მზად, და შეამოწმეთ სწორედ იქ

წარმატებული გაშვება ამტკიცებს, რომ პროცესი დაიწყო. ის არ ამტკიცებს, რომ ქსელი აწეულია, გეიტვეიმ იდენტობა მიიღო ან კერძო აპლიკაცია ხელმისაწვდომია. თუ რამე სხვა გვირაბზეა დამოკიდებული, მას სჭირდება მზადყოფნის სიგნალი, რომელიც კავშირს ასახავს და არა დავალების დაწყების დროს.

გამეორებები უნდა იყოს შეზღუდული და უნდა განასხვავოს ქსელის არქონა უარყოფილი სერთიფიკატისგან. ყოველ ჩავარდნაზე გადატვირთვა ვერ შეაკეთებს ვადაგასულ სერთიფიკატს და ქმნის იდენტური ცდების ჟურნალს, რომელიც ნამდვილს ფარავს.

მიიღეთ დავალება იმ კონტექსტში, სადაც ის რეალურად იმუშავებს: ქსელის გარეშე ჩატვირთვისას, ჩვეულებრივი შესვლისას, ძილიდან გამოღვიძებისას და კონტროლირებული გაჩერებისას. შემდეგ ერთად ჩაწერეთ დავალების ლეიბლი, კლიენტის ვერსია და პროფილის რევიზია, რათა შემდეგმა ადამიანმა მემკვიდრეობით მიიღოს მიკუთვნებადი სერვისი და არა ფაილი, რომელიც ოდესღაც მუშაობდა.

დაკავშირებული სტატიები