launchd er et værktøj til at starte, stoppe og administrere scripts og processer. Hvis du har arbejdet med en hvilken som helst version af Linux, kender du muligvis cron. launchd er dybest set cron i macOS.
Hvad er dæmoner?
![launchd-scripts-maxwells-demon launchd-scripts-maxwells-demon](/f/58f664eba1974e92c7979df58f0a752c.png)
Daemoner (udtales "dæmoner") er scripts, der kører i baggrunden. I modsætning til applikationer kører dæmoner som processer og er ikke under direkte kontrol af brugeren eller en anden applikation. På macOS er de under kommandoen i launchd -rammen, der bestemmer, hvornår de starter og stopper.
Det usædvanlige navn stammer fra Maxwells dæmon, et imaginært middel, der sorterer molekyler i et termodynamisk tankeeksperiment.
Skrivning af scripts
![Sådan køres et Python -script i Mac OS X Sådan køres et Python -script i Mac OS X](/f/f3ff3e8b329361c3861434d358b9daa6.jpg)
For at køre dæmoner gennem launchd skal du skrive nogle scripts. Det mest almindelige scriptsprog er bash. Hvis du vil lære mere om bash -scripting, kan du tjekke vores begynderguide til bash scripting.
Brug af launchd
![launchd-scripts-job-description launchd-scripts-job-description](/f/6de6b993b4958bf31e7913c5e4796433.png)
Scripts i launchd udløses af jobdefinitioner, som er .plist -filer gemt i bestemte biblioteker. Disse XML -filer giver jobbet et navn, angiver det script, der skal startes, og angiver, hvornår scriptet skal køres. Når du har skrevet dit script, skriver og indlæser du en jobdefinition, der starter scriptet på det relevante tidspunkt.
En jobdefinition ligner hvad der er nedenfor:
version="1.0"indkodning="UTF-8"?>version="1.0">> > Etiket>> lokal. genstart>> Program>> /Users/user/Scripts/restart.sh>> RunAtLoad>/>>>
Rediger efter behov, og læg den derefter i en tekstfil med .plist -udvidelsen, før du taber den i det korrekte bibliotek (se nedenfor).
Der er et par vigtige dele til stillingsbeskrivelsen:
- Etiket: navnet på jobbet inden lancering. Skal være unik for hvert job. Disse er skrevet i omvendt domænenotation, og "lokal" er et godt domæne for private agenter.
- Program: hele stien til scriptet, som denne jobbeskrivelse lancerer.
-
RunAtLoad: beskriver, hvornår scriptet skal køres. Der er et par forskellige muligheder her:
- RunAtLoad: Kør, så snart jobdefinitionen er indlæst. Kører kun én gang pr. Last.
-
StartInterval: start jobbet hver n sekunder. Dette eksempel kører jobbet hvert 7200 sekund eller hver 2. time.
> StartInterval>> 7200> -
StartCalendarInterval: køre jobbet på et bestemt tidspunkt og en bestemt dato. Nedenstående kode kører jobbet hver dag kl. 9.00.
> StartCalendarInterval>> > Time>> 9>> Minut>> 0>>
Agenter vs. dæmoner
Når du har skrevet din stillingsbeskrivelse, skal du gemme den i det relevante bibliotek.
launchd skelner yderligere mellem agenter og dæmoner. En agent kører på vegne af den loggede bruger, mens en dæmon kører under rodbrugeren. Det betyder, at hvis du vil begrænse et script til en bestemt brugerkonto, kan du bruge en agent. Hvis du vil have noget til at køre, uanset hvem der er logget ind, bruger du en dæmon.
Forskellen mellem agenter og dæmoner stammer fra, hvor de er gemt på computeren:
- "~/Library/LaunchAgents" kører på vegne af den loggede bruger
- "/Library/LaunchDaemons" kører på rodbrugernes vegne
Du skal gemme din plist på den korrekte placering.
Indlæser job i launchctl
![launchd-scripts-launchctl-list launchd-scripts-launchctl-list](/f/c2a59b7dbe936327a24e50b33f0a2075.png)
Når du har oprettet dine scripts og gemt din agent på det rigtige sted, skal du indlæse det launchctl
. Dette vil ske automatisk ved login i fremtiden.
For at se, hvad der i øjeblikket kører i laucnhctl, kan du bruge launchctl liste
i terminalen. Denne gigantiske liste kan hilses på dit script ved at mærke det med noget som følgende:
launchctl liste |grep lokal. genstart
For at indlæse et script skal du åbne Terminal og bruge følgende kommando:
launchctl load ~/Bibliotek/LaunchAgents/lokal.start.plist
![launchd-scripts-launchctl-load launchd-scripts-launchctl-load](/f/72dd76e533bc6d78c0f5fb244aa4ac35.png)
For at fjerne scriptet fra launchctl -køen skal du bruge losse
kommando:
launchctl aflæsning ~/Bibliotek/LaunchAgents/lokal.start.plist
![launchd-scripts-launchctl-unload launchd-scripts-launchctl-unload](/f/a1b9299e9cb792faa7f46a13b6a22c8f.png)
Indlæsning af et job sætter det i startkøen, og jobbet kører på det tidspunkt, der er angivet i dets startbetingelser. Hvis du vil køre et script med det samme uanset hvad, skal du bruge kommandoen "start":
launchctl start local.restart
Denne kommando tager jobets etiket og fungerer kun, hvis jobbet allerede er indlæst launchctl
.
Konklusion
Du kan bruge launchd til at oprette scripts, der gør ting som at rydde op i filer, genstarte din server på et skema eller køre et program, når en bestemt fil vises. For at lære meget mere om launchd, kan du tjekke ud laucnhd -vejledningen.
Billedkredit: Maxwells_demon
Tilknyttet offentliggørelse: Make Tech Easier kan optjene provision på produkter købt via vores links, hvilket understøtter det arbejde, vi udfører for vores læsere.