Paano Gamitin ang LaunchAgents at LaunchDaemons sa macOS: Isang Kumpletong Gabay

Huling pag-update: 22/09/2025
May-akda: Isaac
  • Ang mga LaunchAgent ay nakasalalay sa user at system na LaunchDaemons; pareho ay pinamamahalaan ng launchd at .plist na mga file sa mga partikular na path.
  • Ipinakilala ng macOS 13+ ang SMAppService, mga notification, at mga XML na profile para sa malinaw na pag-apruba ng mga item sa background.
  • Mag-diagnose gamit ang sfltool, launchctl at mga tala mula sa backgroundtaskmanagement; suriin ang mga item sa Mga Setting ng System.
  • Ilapat ang mga tamang pahintulot, gamitin ang KeepAlive sa SuccessfulExit/NetworkState, at iwasang hawakan ang /System/Library para sa maximum na katatagan.

Gabay sa LaunchAgents at LaunchDaemons sa macOS

Sa macOS, karamihan sa mahika ay nangyayari sa likod ng mga eksena salamat sa mga serbisyong nagsisimula nang hindi mo man lang napapansin, at ang pagpapares LaunchAgents/LaunchDaemons ang puso ng automation na iyon. Kung naisip mo kung paano gumawa ng isang script boot Mag-isa, pinananatiling buhay ang isang kritikal na app, o pag-audit kung ano ang nilo-load ng mga app, narito ang praktikal na gabay na hinahanap mo.

Mula sa MacOS 13, binago ng Apple ang mga patakaran ng laro gamit ang isang bagong istraktura sa mga pakete ng app at ang balangkas ng SMAppService, na nagbibigay ng higit na transparency sa user at pare-parehong pamamahala ng mga elemento sa pag-log in, mga ahente sa paglulunsad y maglunsad ng mga daemon. Bukod pa rito, may mga pagpapahusay para sa mga administrator na may mga profile ng pagsasaayos at mga tool sa diagnostic na isang magandang ideya na makabisado.

Mga program na tumatakbo sa startup
Kaugnay na artikulo:
Mga Programang Tumatakbo Sa Startup. Alin ang mga tatanggalin at paano ito gagawin

Ano ang inilunsad, LaunchAgents at LaunchDaemons

Ang proseso inilunsad Ito ay magsisimula pagkatapos lamang ng kernel (ito ay isa sa mga unang magsimula, kadalasan sa PID 1) at ito ang naglulunsad, nagkokontrol, at nagsusubaybay sa iba pang mga serbisyo. Karaniwan itong kumukonsumo ng kaunting mga mapagkukunan, ngunit kung isang araw ay makikita mo itong tumatakbo nang mataas sa Monitor ng Aktibidad, kadalasang ibinabalik ito ng pag-restart sa normal.

Los IlunsadDaemons Isinasagawa ang mga ito sa pagsisimula ng system at ginagawa ito sa konteksto ng ugat; hindi sila umaasa sa sinumang nagla-log in at hindi maaaring makipag-ugnayan sa graphical na interface. Ang mga ito ay perpekto para sa mga gawain ng system, patuloy na proseso, at mga serbisyo na kailangang maging available kahit na hindi naka-log in ang isang user.

Los Ilunsad ang mga Ahente Na-load ang mga ito kapag nag-log in ang isang partikular na user at maaaring makipag-ugnayan sa interface (menu bar, notification, window, atbp.). Ang mga ito ay perpekto para sa mga kagamitan ng gumagamit, mga app wizard at proseso na nangangailangan ng pag-login.

Sa parehong mga kaso, ang pagsasaayos ay nasa mga file .plist na may mga key at value na nagpapahiwatig kung ano ang tatakbo, kailan, at paano. Ang mga .plist file na ito ay pinamamahalaan sa pamamagitan ng launchd at nakatira sa mga partikular na lokasyon sa system, kaya ang pag-alam kung saan sila pupunta, kung anong mga pahintulot, at kung paano i-load ang mga ito ay napakahalaga.

Istraktura at lokasyon ng .plist file

inaayos ng macOS ang mga .plist na file tulad ng sumusunod: sa antas ng system sa /System/Library/LaunchAgents y /System/Library/LaunchDaemons, sa buong mundo / Library / LaunchAgents y / Library / LaunchDaemons, at sa antas ng user sa ~ / Library / LaunchAgents. Ang malusog na panuntunan ay i-install ang iyong sarili sa /Library o sa ~/Library, at Bawal hawakan ang /System/Library tree.

Ang mga .plist file ay mga XML file na may mga key tulad ng Tatak (tagatukoy ng serbisyo), Programa o Mga Argumento ng Programa (ano ang tatakbo), RunAtLoad (magsimula sa sandaling mag-load ito) o Panatilihing buhay (subukang muli/live na patakaran). Maaari mong tingnan ang mga ito gamit ang isang text editor, ngunit maingat na i-edit ang mga ito at laging alam kung ano ang ginagawa ng bawat key.

Para matanggap ng launchd ang isang .plist, dapat igalang ang pagmamay-ari at mga pahintulot. Bilang isang tagapangasiwa: sudo chown root:wheel /Library/LaunchAgents/mi.servicio.plist y sudo chmod 644 /Library/LaunchAgents/mi.servicio.plist. Tinitiyak iyon ng mga setting na ito ugat maaaring magsulat, ang grupo gulong at mababasa ito ng iba, at pinagkakatiwalaan ng launchd ang file.

Kapag na-install, naglo-load ito ng sudo launchctl load -w /Library/LaunchAgents/mi.servicio.plist o katapat nito sa /Library/LaunchDaemonsUpang alisin ito, maaari mong gamitin launchctl remove com.ejemplo.mi-servicio (kung saan ang label ay tumutugma sa halaga ng Tatak).

  Hindi Sapat na Pag-alaala upang Buksan ang Web page na ito sa Google Chrome

Mga bagong feature mula noong macOS 13: SMAppService at transparency ng user

Ipinakilala ng Apple ang isang istraktura ng app bundle na nagpapanatili ng mga helper executable sa loob mismo ng app at pinamamahalaan ang mga ito SMAppServicePinapayagan nito ang pag-record at pagsubaybay mga elemento sa pag-login, mga ahente ng paglulunsad, at mga daemon sa paglulunsad bilang mga auxiliary executable, nang hindi ikinakalat ang mga ito sa buong system at may higit na visibility para sa user.

Kapag na-deploy ang mga item na ito sa pamamagitan ng MDM o mga installer, ipinapakita ng macOS 13+ ang a abiso sa pag-install ng pinamamahalaang item upang mag-ulat at payagan ang pagsusuri sa Mga Setting ng System. Ang unang tugma sa isang panuntunan ay bumubuo ng isang abiso; ang mga kasunod na tugma sa parehong araw ay hindi na naglalabas ng mga paulit-ulit na notification.

Kung ang gumagamit nagpapaliban ang notification, pinapatahimik ng macOS ang mga karagdagang notification ng ganitong uri para sa napiling panahon (1 araw o 1 linggo). Habang nakikita ang notification, walang lalabas na karagdagang pag-install; kung idi-dismiss mo ito, ang mga kasunod na pag-install ay magpapatuloy ng mga notification. Binabawasan ng patakarang ito ang ingay habang nagbibigay ng kontrol.

Visibility at diagnostics: lahat ng kailangan mong suriin

Para makita kung ano ang nire-record gamit ang bagong frame, buksan Mga Setting ng System > Pangkalahatan > Mga Startup ItemDoon mo makikita ang login at background na mga elemento; ipinapakita sa iyo ng button na impormasyon ang inilulunsad na maipapatupad at mga nauugnay na detalye.

Online comandos, marami kang gamit. Sa launchctl list Makukuha mo ang lahat ng tumatakbong serbisyo. Para sa balangkas ng gawain sa background, gamitin sfltool dumpbtm at suriin ang kasalukuyang katayuan (kasama ang Uuid ng payload ng servicemanagement). Kung kailangan mong linisin ang estado sa pagitan ng mga pagsubok, tumakbo sfltool resetbtm at, para sa kalinisan, i-restart el Kapote bago subukan muli.

Para sa mga real-time na log, i-filter sa Console ayon sa naaangkop na subsystem at kategorya, o ilunsad sa Pandulo: log stream --debug --info --predicate "subsystem == 'com.apple.backgroundtaskmanagement' AND category == 'mcx'"Sa pamamagitan nito, makakakita ka ng mga kapaki-pakinabang na bakas ng pagdaragdag, pagtanggal, at pamamahala ng item.

Kung mayroon kang access sa AppleSeed para sa IT, ang tool Mac Evaluation Utility 4.3.0+ bumubuo ng mga detalyadong ulat kasama ang mga linya ng kung ano ang ibinabato nito sfltool dumpbtm, at nagbibigay-daan sa pag-export ng mga delimited na resulta para sa karagdagang pagsusuri o ugnayan sa imbentaryo.

Mga XML na profile para sa pamamahala ng mga gawain sa background

Maaaring awtomatikong aprubahan ng mga organisasyon ang mga item sa background gamit ang a Profile ng pagsasaayos ng XMLAng nilalaman ay isang hanay ng mga panuntunan (mga diksyunaryo); kapag tumugma ang isang elemento, naaprubahan ito. Mayroong ilang mga uri ng pagtutugma na nagkakahalaga ng mastering.

  • BundleIdentifier (Bundle ID) na may eksaktong tugma para sa isang partikular na app.
  • BundleIdentifierPrefix upang pahintulutan ang mga pamilya ng mga app sa ilalim ng prefix.
  • TeamIdentifier mula sa developer (pag-sign ng code) na may eksaktong tugma.
  • Tatak ng serbisyo (key Label mula sa launchd .plist) na may eksaktong tugma.
  • LabelPfix upang aprubahan ang mga tag na nagsisimula sa isang partikular na pattern.

Sa diskarteng ito, tinitiyak ng mga administrator na ang mga lehitimong elemento ay isinaaktibo nang walang alitan, lahat ay may traceability at pagsunod sa patakaran ng korporasyon. Kung namamahala ka ng mga fleet, makakatipid ito sa iyong suporta at mapipigilan ang hindi kinakailangang downtime.

Seguridad, malware at kapangyarihan ng system

Maraming installer ang nagdaragdag ng mga .plist na file na nakalimutan kapag na-uninstall ang orihinal na app. Maaaring i-restart ng residue na ito ang mga prosesong inakala mong naalis. Higit pa rito, malware inaabuso ang LaunchAgents upang magpatuloy, mangolekta ng data, at makipag-usap sa mga malalayong server.

  Windows Hello: Kumpletong Gabay sa Mukha, Fingerprint, at PIN Setup

Ang Apple ay nagpapanatili ng attribution file na may mga karaniwang helper binary na tumutulong na matukoy kung sino ang: /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plistAng pagkonsulta dito ay maaaring magbigay sa iyo ng mga pahiwatig katangian mga executable sa kanilang parent app sa forensic analysis o paglilinis.

Bilang isang layer ng surveillance na "ginawa ng kamay", maaari mong i-activate Mga pagkilos sa folder sa mga sensitibong ruta: /Library/LaunchAgents, /Library/LaunchDaemons, /System/Library/LaunchAgents, /System/Library/LaunchDaemons y ~/Library/LaunchAgentsSa ganitong paraan, aabisuhan ka kapag may lumabas na bagong .plist file, na nagbibigay-daan sa iyong suriin ito kaagad.

Paglikha ng sarili mong LaunchAgents at LaunchDaemons

Ang pangunahing ideya ay simple: sumulat ng .plist na may Tatak (hal. com.ejemplo.miscript), tukuyin Programa o Mga Argumento ng Programa gamit ang eksaktong landas ng executable/script, itakda ang mga key tulad ng RunAtLoad at, kung naaangkop, Panatilihing buhay, at ilagay ito sa naaangkop na folder.

Kung dapat tumakbo ang gawain bago mag-login at walang UI, ilagay ito /Library/LaunchDaemons. Kung umaasa ka sa isang user at/o nakikipag-ugnayan sa interface, gamitin /Library/LaunchAgents o ~/Library/LaunchAgents (para lamang sa gumagamit na iyon). Tandaan na mag-apply ari-arian at mga permit tama bago mag-load.

Upang i-activate kaagad: sudo launchctl load -w /Library/LaunchDaemons/com.ejemplo.miscript.plist. Para huminto at mag-download: sudo launchctl unload -w /Library/LaunchDaemons/com.ejemplo.miscript.plist o launchctl remove com.ejemplo.miscript. Siguraduhin na ang ang mga landas sa mga binary ay umiiral at maipapatupad.

Praktikal na payo: laging subukan muna ~ / Library / LaunchAgents sa iyong user, tingnan ang mga log at gawi, at pagkatapos ay i-promote lamang sa /Library. Iwasan ang pagbabago /System/Library/…; bilang karagdagan sa pagiging masamang gawi, ang protektadong sistema (SIP) pinipigilan ito para sa mga kadahilanang pangseguridad.

Mga patakaran ng KeepAlive at totoong buhay na mga kaso ng paggamit

Kung kailangan mo ng proseso para laging manatili sa itaas, ang susi Panatilihing buhay nagbibigay-daan sa iyo ng granularity. Maaari mong ilagay <true/> para sa walang kundisyong muling pagsubok o gumamit ng diksyunaryo na may mga kundisyon para sa mahusay na kontrol.

Pinagsasama ang isang napaka-kapaki-pakinabang na pattern Panatilihing buhay sa Matagumpay na Lumabas. Kapag tinukoy mo SuccessfulExit = false, muling susubukan ng launchd kung lalabas ang proseso na may code maliban sa 0 (crash, error), ngunit kung "malinis" itong isinara ng user (exit 0), hindi muling ilulunsad ito. Sa ganitong paraan maiiwasan mo ang anumang abala kapag nag-a-update ng app o nagsasara ng iyong Mac.

Ang isa pang karaniwang diskarte ay NetworkState: kung itinakda mo ito sa true Sa loob ng KeepAlive, irerespeto ng muling paglulunsad ang "availability ng network" (may IP address ang device). Tandaan: ang pagkakaroon ng network ay hindi palaging nangangahulugan ng internet access; Sinusuri lamang ng launchd ang pangunahing koneksyon, hindi na tumutugon ang iyong ISP.

Kung plano mong panatilihing buhay ang isang interface app (halimbawa, isang menu bar utility), lumikha ng isang LaunchAgent kasama ang aktwal nitong package binary: hal., /Applications/MiApp.app/Contents/MacOS/MiApp. Iwasan ang mga path sa mga alias o ang "iconic" na app at ituro ang executable sa loob ng package.

Sa mga hindi nag-aalaga na kapaligiran (kiosk, mga screen ng impormasyon, mga server na may patuloy na session), ang mga patakarang ito ay maaaring gumawa ng pagkakaiba para sa iyong mga tool huwag mahulog at kung gagawin nila, tumayo sila sa kanilang sarili nang walang interbensyon ng tao.

Mga lumang alternatibo at gawi na dapat iwasan

Umalis si Apple sa isang tabi Cron y LoginHooks bilang mga inirerekomendang paraan upang ilunsad ang mga gawain; ang opisyal na landas ay inilunsad. Mayroon din Mga StartupItem sa mga mas lumang bersyon (mga folder sa System at Global Library), ngunit hindi dapat gamitin para sa mga bagong pagpapatupad ngayon.

I-edit ang mga system tree sa pamamagitan ng kamay (/System/Library/LaunchDaemons) ay maaaring mapunta sa isang Mac na hindi nagsisimula. Huwag makipagsapalaran: kung kailangan mong mag-boot nang napakaaga, gamitin ang /Library/LaunchDaemons na may tamang configuration at mga pahintulot, at iwanan ang mga bahagi ng system.

Pagsubaybay sa pagganap at pag-troubleshoot

Kung napansin mong mabagal ang iyong Mac, buksan Monitor ng Aktibidad at ayusin ayon sa CPU. Karaniwan launchd hindi lumilitaw sa pangunguna; kung ito ay patuloy na nasa 30-40%, i-restart ang system at suriin muli. Kung magpapatuloy ito, ilista ang mga serbisyo sa launchctl list at alisin ang mga suspek.

  Paano ako maglilipat ng mga larawan mula sa aking digital camera papunta sa aking iPhone o iPad?

Upang i-audit kung aling mga item ang naitala gamit ang bagong balangkas, sfltool dumpbtm ay ginto: kunin ang iyong paglabas at i-save ito sa iyong ulat ng suporta. Sa pagitan ng mga pagsubok, sfltool resetbtm Nag-iiwan ito sa iyo ng malinis na talaan; tandaan na i-restart upang maiwasan ang mga intermediate na estado.

Ang mga log ay iyong mga kaibigan: kasama log stream --debug --info --predicate "subsystem == 'com.apple.backgroundtaskmanagement' AND category == 'mcx'" Makakakuha ka ng magagandang detalye ng mga high, lows, at pagbabago. Ipares ito sa Console pag-filter sa pamamagitan ng parehong mga patlang kung gusto mo ng isang graphical na interface.

Pamamahala sa sukat gamit ang MDM at pinakamahuhusay na kagawian

Sa mga pinamamahalaang deployment, lumikha ng a XML profile na naglalarawan ng mga panuntunan sa pag-apruba (sa pamamagitan ng bundle ID, prefix, Team ID, tag, o prefix ng label). Sa ganitong paraan, kapag nairehistro ng isang app ang helper nito, awtomatikong aaprubahan ito ng macOS, at makakakita ang user ng kinokontrol na notification.

Subukan ang iyong mga karaniwang daloy (i-install, i-upgrade, i-uninstall) at patunayan ang resulta gamit ang Pamamahala ng Deklarasyon na Device sa macOS 14+ (ulat sa katayuan) at sa mga nabanggit na tool. Mangalap ng feedback mula sa mga user at vendor para iakma ang mga app sa bagong framework.

Idokumento ang panloob na patakaran: kung ano ang pinahintulutan, sa ilalim ng anong pamantayan, sino ang nagsusuri nito, kung paano ito sinusuri, at kung ano ang gagawin kung ang isang elemento ay nagsimulang kumonsumo ng mga mapagkukunan. Sa ganitong kalinisan, maiiwasan mo ang mga sorpresa at pagbutihin ang katiwasayan at ang katatagan ng fleet.

Mga tip sa paglilinis at patuloy na pagsubaybay

Kung pagkatapos mag-uninstall ng isang bagay ay muling lumitaw ang item sa startup, hanapin ang .plist nito ayon sa pangalan sa /Library/LaunchAgents, /Library/LaunchDaemons y ~/Library/LaunchAgents. Tanggalin ang file at i-download ang serbisyo gamit ang launchctl remove gamit ang kanyang Tatak.

Upang mapataas ang iyong visibility, paganahin ang mga ito Mga pagkilos sa folder Nagkomento: Sa tuwing may lalabas na bagong .plist file sa mga sensitibong path, makakatanggap ka ng notification at maaari kang mamagitan kaagad. Ito ay isang simpleng hakbang na nakakatipid sa iyo ng pananakit ng ulo.

Tandaan na ang mga ahente ay per-user at ang mga daemon ay sa buong system. Sa mga nakabahaging makina, maaaring gusto mong mas gusto ang mga ahente ~/Library/LaunchAgents para hindi makakaapekto sa ibang mga profile, maliban kung ito ay isang cross-corporate na gawain.

Kung ino-automate mo ang isang app upang palaging manatiling bukas, tandaan na maaari itong mag-block shutdown o i-restart kapag muling inilunsad kapag sinubukan ng system na i-shut down. Bago mag-update o mag-restart, huwag paganahin ang serbisyo gamit ang launchctl remove o i-download ang .plist, at muling buhayin ito pagkatapos.

Panghuli, huwag kalimutang suriin ang pana-panahon Mga Setting ng System > Pangkalahatan > Mga Startup Item at ang seksyon ng mga item sa background. Ito ang pinakamabilis na paraan upang matukoy ang mga "stowaways" na pumapasok nang walang ingat na mga installer.

Upang mangibabaw LaunchAgents at LaunchDaemons Nagbibigay ito sa iyo ng kontrol: alam mo kung ano ang magsisimula, kailan, at bakit; maaari mong aprubahan ang mga lehitimong aksyon sa mga profile, mag-diagnose gamit ang sfltool at log, at palakasin ang seguridad salamat sa transparency na ibinigay ng SMAppService sa macOS 13+. Sa ilang malinaw na panuntunan (mga tamang landas, pahintulot, pare-parehong mga label, at wastong paggamit ng KeepAlive), magkakaroon ka ng mga matatag na serbisyo, matalinong mga user, at mas predictable na sistema, nang hindi na kailangang makipagpunyagi sa mga hindi napapanahong pamamaraan.