launchd er et verktøy for å starte, stoppe og administrere skript og prosesser. Hvis du har jobbet med en hvilken som helst versjon av Linux, kan du være kjent med cron. launchd er i utgangspunktet cron i macOS.

Hva er daemoner?

Daemoner (uttalte "demoner") er skript som kjører i bakgrunnen. I motsetning til applikasjoner kjører daemoner som prosesser og er ikke under direkte kontroll av brukeren eller et annet program. På macOS er de under kommandoen av lanseringsrammen som bestemmer når de starter og stopper.

Det uvanlige navnet kommer fra Maxwells demon, en imaginær agent som sorterer molekyler i et termodynamisk tankeeksperiment.

Skrive skript

For å kunne drive daemoner gjennom launchd, må du skrive noen skript. Det vanligste skriptspråket er bash. Hvis du vil lære mer om bash scripting, kan du sjekke ut vår nybegynners guide til bash scripting.

Bruke launchd

Skript i launchd utløses av jobbdefinisjoner som er .plist-filer lagret i bestemte kataloger. Disse XML-filene gir jobben et navn, spesifiser skriptet som skal lanseres, og angi når man skal kjøre skriptet. Når du har skrevet skriptet ditt, skriver du og laster en jobbdefinisjon som lanserer skriptet på det aktuelle tidspunktet.

En jobbdefinisjon ser noe ut som hva som er under:

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

Endre etter behov, og legg det i en tekstfil med .plist-utvidelsen før du slipper den i riktig katalog (se nedenfor).

Det er noen viktige deler til stillingsbeskrivelsen:

  • Etikett: navnet på jobben innen launchd. Må være unikt for hver jobb. Disse er skrevet i omvendt domene notasjon, og "local" er et flott domene for private agenter.
  • Program: Hele banen til skriptet som denne stillingsbeskrivelsen lanserer.
  • RunAtLoad: beskriver når skriptet skal kjøres. Det er noen forskjellige alternativer her:
    • RunAtLoad : Kjør så snart jobbdefinisjonen er lastet. Kjører kun en gang per last.
    • StartInterval : Start jobben hvert n sekund. Dette eksempelet vil kjøre jobben hver 7200 sekunder eller hver 2. time.
       StartInterval  7200 
    • StartCalendarInterval : Kjør jobben på en bestemt tid og dato. Koden nedenfor vil kjøre jobben hver dag klokka 9.00.
       StartCalendarInterval  Time  9  Minutt  0 

Agenter mot daemoner

Når du har skrevet jobbbeskrivelsen din, må du lagre den i riktig katalog.

lanserer videre skiller mellom agenter og demoner. En agent kjører på vegne av den innloggede brukeren, mens en demon kjører under rotenbrukeren. Dette betyr at hvis du vil begrense et skript til en bestemt brukerkonto, kan du bruke en agent. Hvis du vil ha noe å løpe, uansett hvem som er logget inn, bruker du en demon.

Forskjellen mellom agenter og demoner er hentet fra hvor de er lagret på datamaskinen:

  • "~ / Library / LaunchAgents" kjører på vegne av den innloggede brukeren
  • "/ Library / LaunchDaemons" kjører på vegne av roten brukere

Du må lagre plist på riktig sted.

Laster inn jobber i launchctl

Når du har opprettet skriptene dine og lagret agenten på riktig sted, må du laste den inn i launchctl . Dette skjer automatisk ved innlogging i fremtiden.

For å se hva som kjører i laucnhctl, kan du bruke launchctl list i terminalen. Denne gigantiske listen kan greppes for skriptet ditt ved å merke det med noe som følgende:

 launchctl liste | grep local.restart 

Hvis du vil laste inn et skript, åpner du Terminal og bruker følgende kommando:

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

For å fjerne skriptet fra launchctl-køen, bruk kommandoen unload :

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

Når du legger inn en jobb, legges den inn i startkøen, og jobben vil kjøre på den tiden som er angitt i startbetingelsene. Hvis du vil kjøre et skript umiddelbart uansett hva, bør du bruke "start" -kommandoen:

 launchctl start local.restart 

Denne kommandoen tar jobben sin etikett og vil bare fungere hvis jobben allerede er lastet inn i launchctl .

Konklusjon

Du kan bruke launchd til å lage skript som gjør ting som å rydde opp filer, starte serveren på nytt på en tidsplan eller kjøre et program når en bestemt fil vises. For å lære mye mer om lansering, kan du sjekke ut laucnhd-opplæringen.

Bildekreditt: Maxwell's_demon