Кіріспе

MacOS жүйелік қызметтерді басқару фреймворкі

launchd – Apple Inc. компаниясының macOS құрамында BSD үлгісіндегі init және SystemStarter-ді алмастыру мақсатымен жасалған init және операциялық жүйелік қызметтерді басқару демоны. Launchd-ді FreeBSD және одан туындаған жүйелерге көшіру әрекеттері жасалды.

Құралымдары

Launch жүйесінде екі негізгі бағдарлама бар: launchd және launchctl. Launchd жүйе және пайдаланушы деңгейінде демондарды басқарады. Xinetd-ге ұқсас, launchd қажет болғанда демондарды іске қоса алады. Watchdogd-ға ұқсас, launchd демондарды бақылап, олардың үздіріліссіз жұмыс істеуін қамтамасыз етеді. Launchd сонымен қатар macOS-та init-ті PID 1 ретінде алмастырды, нәтижесінде ол жүйені жүктеу кезінде іске қосуға жауапты. Конфигурациялық файлдар launchd арқылы іске қосылатын қызметтердің параметрлерін анықтайды. LaunchAgents және LaunchDaemons кітапхана папкаларының ішкі каталогтарында сақталатын, қасиеттер тізіміне негізделген файлдарда шамамен отыз түрлі кілтті орнатуға болады. Launchd-тің өзі бұл конфигурациялық файлдарды білмейді және оларды оқу мүмкіндігі жоқ – бұл "launchctl" бағдарламасының жауапкершілігінде. Launchctl – IPC арқылы launchd-мен байланысатын және launchd-тің түсінетін арнайы сөздік протоколын пайдаланып, launchd тапсырмаларын сипаттау үшін қолданылатын қасиеттер тізімін талдайтын командалық жол бағдарламасы. Launchctl daemon-дарды жүктеу және түсіру, launchd басқаруындағы жұмыстарды бастау және тоқтату, launchd және оның дочерлік процестері үшін жүйе пайдалану статистикасын алу және орта шарттарын орнату үшін қолданылуы мүмкін.

ұшыру

Launchd-тің екі негізгі міндеті бар. Біріншісі – жүйені іске қосу, екіншісі – қызметтерді жүктеу және сақтау. Мұнда PowerPC Mac-та Mac OS X Tiger жүйесінің жеңілдетілген көрінісі (Intel Mac-та EFI Open Firmware-ны және boot.efi BootX-ты алмастырады): Open Firmware аппаратты инициализациялайды, содан кейін BootX жүктеледі. BootX ядроны жүктейді, айналмалы курсорды (pinwheel) көрсетіп, қажетті ядролық кеңейтулерді (kexts) жүктейді. Ядро іске қосылғанда launchd жүктеледі. Launchd /etc/rc-ді, сондай-ақ /System/Library/LaunchDaemons және /Library/LaunchDaemons каталогтарын қарап шығатын әртүрлі скрипттерді орындайды, қажет болған жағдайда launchctl-ге тізімдерді шақырады, содан кейін launchd кіру терезесін іске қосады. 4-қадамда бастау скрипттері жұмыс істеуге тиіс тапсырмаларды іздеп, бірнеше каталогты қарап шығады. Қаралатын екі түрлі каталог бар: LaunchDaemons каталогтарында root құқығымен, әдетте фондық процестер ретінде іске қосылатын элементтер орналасқан. LaunchAgents каталогтарында пайдаланушы ретінде немесе userland контекстінде іске қосылатын агенттік қолданбалар деп аталатын тапсырмалар бар. Бұл скрипттер немесе басқа да алдыңғы планды элементтер болуы мүмкін, тіпті олар пайдаланушы интерфейсін де қамтуы мүмкін. Бұл каталогтардың барлығы Mac OS X-тің стандартты кітапхана каталогтарында сақталады. Launchd, SystemStarter-ден өте ерекшеленеді, себебі ол жүктелу кезінде барлық демонды іске қоспауы мүмкін. Launchd-тің маңызды ерекшелігі, xinetd-ке ұқсас, талап бойынша демонды іске қосу идеясы болып табылады. Launchctl жүктелу кезінде тапсырмалар тізімін қарап шыққанда, launchd-тен осы тапсырмалардың сұраған барлық порттарын резервтеуді және тыңдауды сұрайды. Егер plist-те "OnDemand" кілті арқылы көрсетілген болса, демон сол уақытта жүктелмейді. Керісінше, launchd портты тыңдап, қажет болған кезде демонды іске қосып, қажеттілігі болмағанда оны тоқтатады. Демон жүктелгеннен кейін, launchd оны қадағалап, қажет болған жағдайда оның жұмыс істеп тұрғанына көз жеткізеді. Бұл watchdogd-қа ұқсас және процестер өздігінен бұрылысқа түсуге немесе демонды өздігінен іске қосуға тырыспауы керек деген watchdogd талабын бөліседі. Егер процесс фонға өтсе, launchd оны жоғалтып, қайта іске қосуға тырысады. Осының нәтижесінде Mac OS X Tiger бұрынғы нұсқаларға қарағанда әлдеқайда жылдам жүктеледі. Жүйе тек іске қосылатын демонды тіркейді және олар қажет болғанша іске қосылмайды. Шындығында, жүктелу кезінде пайда болатын прогресс жолағы – бұл жай ғана плацебо қолданба (WaitingForLoginWindow деп аталады), ол уақыт өтуінен басқа ештеңе көрсетпейді. Launchd жүктелуі кезінде басқарудың ең қиын бөлігі – тәуелділіктерді басқару. SystemStarter бастау элементінің plist-інде "Uses", "Requires" және "Provides" кілттерін қолданатын тәуелділіктердің өте қарапайым жүйесіне ие болды. Tiger-де launchd тәуелділіктерін құру кезінде екі негізгі стратегия бар: IPC демонды өзара байланысуға мүмкіндік береді, осылайша тәуелділіктерді шешеді, немесе демон файлдарды немесе жолдардағы өзгерістерді бақылай алады. IPC пайдалану SystemStarter кілттерінен әлдеқайда күрделі және әзірлеушіден көп жұмыс талап етеді, бірақ ол таза және жылдам жүктелуге әкелуі мүмкін. SystemStarter OS X Mountain Lion-ға дейін қолдау көрсетті, бірақ OS X Yosemite-де алынып тасталды.

іске қосу

Launchd-те қызметтерді басқару launchctl бағдарламасында шоғырланған. launchctl өздігінен командаларды команда жолынан, стандарттық кірістен немесе интерактивті режимде қабылдай алады. Жоғары өкілдік құқықтарымен launchctl-ді жүйелік деңгейде өзгерістер енгізу үшін пайдалануға болады. launchctl командаларының жиынтығы /etc/launchd.conf файлында сақталғанда тұрақты болып қалады. (Әр пайдаланушы үшін ~/.launchd.conf файлы қарастырылған, бірақ macOS-тың ешбір нұсқасында қолдау көрсетілмейді.) launchctl, launchd-мен Mach-қа тән IPC механизмі арқылы байланысады.

Сокетті іске қосу протоколы

Сокеттер астындағы әрбір кілттің атауы жұмыс іске қосылғанда оның ортасына қойылады, ал сол сокеттің файл дескрипторы осы орта айнымалысында қолжетімді болады. Бұл systemd-нің сокетті белсендіруінен өзгеше, себебі жұмыс конфигурациясы ішіндегі сокет анықтамасының атауы қолданбаға тікелей енгізілген. Бұл протокол аз ғана икемді, бірақ systemd сияқты, демоннан бастапқы файл дескрипторын тікелей енгізуді талап етпейді (2014 жылғы мәлімет бойынша, ол 3-ке тең).

Apple ашық бастапқы кодының шығарылу тарихы

Версия Лицензия Кіріктірілген macOS нұсқалары Кіріктірілген Apple Developer Tools нұсқалары launchd 106 Apple Public Source License launchd 106.3 Apple Public Source License launchd 106.10 Apple Public Source License launchd 106.13 Apple Public Source License launchd 106.14 Apple Public Source License launchd 106.20 Apple Public Source License launchd 152 Apache License 2.0 launchd 257 Apache License 2.0 launchd 258.1 Apache License 2.0 launchd 258.12 Apache License 2.0 launchd 258.18 Apache License 2.0 launchd 258.19 Apache License 2.0 launchd 258.22 Apache License 2.0 launchd 258.25 Apache License 2.0 launchd 328 Apache License 2.0 launchd 329.3 Apache License 2.0 launchd 329.3.1 Apache License 2.0 launchd 329.3.2 Apache License 2.0 launchd 329.3.3 Apache License 2.0 launchd 392.18 Apache License 2.0 launchd 392.35 Apache License 2.0 launchd 392.36 Apache License 2.0 launchd 392.38 Apache License 2.0 launchd 392.39 Apache License 2.0 launchd 442.21 Apache License 2.0 launchd 442.26.2 Apache License 2.0 launchd 842.1.4 Apache License 2.0 launchd 842.90.1 Apache License 2.0 launchd 842.92.1 Apache License 2.0