launchd er et værktøj til at starte, stoppe og administrere scripts og processer. Hvis du har arbejdet med nogen version af Linux, er du måske bekendt med cron. launchd er grundlæggende cron i macOS.

Hvad er dæmoner?

Daemoner (udtalte "dæmoner") er scripts, der løber i baggrunden. I modsætning til applikationer kører daemoner som processer og er ikke under direkte kontrol af brugeren eller en anden applikation. På macOS er de under kommandoen for lanceringsrammen, der bestemmer, hvornår de starter og stopper.

Det usædvanlige navn kommer fra Maxwells dæmon, et imaginært middel, der sorterer molekyler i et termodynamisk tankeeksperiment.

Skrive scripts

For at kunne køre dæmoner gennem launchd, skal du skrive nogle scripts. Det mest almindelige script sprog er bash. Hvis du vil lære mere om bash scripting, kan du tjekke vores begynder guide til bash scripting.

Brug af launchd

Scripts i launchd udløses af jobdefinitioner, som er .plist-filer gemt i bestemte mapper. Disse XML-filer giver jobbet et navn, angiver det script, der skal lanceres, og angiver, hvornår scriptet skal køres. Når du har skrevet dit script, skal du skrive og indlæse en jobdefinition, der starter scriptet på det rette tidspunkt.

En jobdefinition ser noget ud som nedenfor:

 Etiket  local.restart  Program  /Users/user/Scripts/restart.sh  RunAtLoad 

Rediger efter behov, og sæt det i en tekstfil med .plist-udvidelsen, før du slipper den i den rigtige mappe (se nedenfor).

Der er et par vigtige dele til jobbeskrivelsen:

  • Etiket: navnet på jobbet inden launchd. Skal være unikt for hvert job. Disse er skrevet i omvendt domæne notation, og "local" er et godt domæne for private agenter.
  • Program: Skriftens fulde bane starter denne jobbeskrivelse.
  • 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 en gang pr. Belastning.
    • StartInterval : Start jobbet hvert n sekund. Dette eksempel løber jobbet hver 7200 sekunder eller hver anden time.
       StartInterval  7200 
    • StartCalendarInterval : Kør jobbet på en bestemt tid og dato. Nedenstående kode kører jobbet hver dag kl. 9.
       StartCalendarInterval  Time  9  Minut  0 

Agenter vs daemoner

Når du har skrevet din jobbeskrivelse, skal du gemme den i den relevante mappe.

lanceringen yderligere skelner mellem agenter og dæmoner. En agent kører på vegne af den loggerede bruger, mens en daemon kører under rodbrugeren. Dette betyder, at hvis du vil begrænse et script til en bestemt brugerkonto, kan du bruge en agent. Hvis du vil have noget at køre, uanset hvem der er logget ind, bruger du en dæmon.

Forskellen mellem agenter og dæmoner er hentet fra hvor de er gemt på computeren:

  • "~ / Library / LaunchAgents" kører på vegne af den logget bruger
  • "/ Library / LaunchDaemons" kører på vegne af root brugere

Du skal gemme dit plist på den rigtige placering.

Indlæser job i launchctl

Når du har oprettet dine scripts og gemt din agent på det rigtige sted, skal du indlæse det i launchctl . Dette sker automatisk på logins i fremtiden.

For at se, hvad der aktuelt kører i laucnhctl, kan du bruge launchctl list i terminalen. Denne kæmpe liste kan fikses til dit script ved at mærke det med noget som følgende:

 launchctl liste | grep local.restart 

For at indlæse et script skal du åbne Terminal og bruge følgende kommando:

 launchctl load ~ / Bibliotek / LaunchAgents / local.restart.plist 

For at fjerne scriptet fra launchctl køen, brug kommandoen unload :

 launchctl unload ~ / Library / LaunchAgents / local.restart.plist 

Ved at indlæse et job sættes det i startkøen, og jobbet kører på det tidspunkt, der er angivet i dets startbetingelser. Hvis du vil køre et script straks 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 i launchctl .

Konklusion

Du kan bruge launchd til at oprette scripts, der gør ting som rydde filer op, genstarte din server på en tidsplan eller køre et program, når en bestemt fil vises. For at lære meget mere om launchd, kan du tjekke laucnhd-tutorialen.

Billedkredit: Maxwell's_demon