launchd är ett verktyg för att starta, stoppa och hantera skript och processer. Om du har arbetat med någon version av Linux kanske du känner till cron. launchd är i princip cron i macOS.

Vad är daemoner?

Daemoner (uttalade "demoner") är skript som körs i bakgrunden. Till skillnad från applikationer kör daemoner som processer och är inte under direkt kontroll av användaren eller en annan applikation. På macOS är de under ledning av lanseringsramen som bestämmer när de börjar och slutar.

Det ovanliga namnet kommer från Maxwells demon, ett imaginärt medel som sorterar molekyler i ett termodynamiskt tankeexperiment.

Skriva skript

För att springa daemon genom launchd måste du skriva några skript. Det vanligaste skriptspråket är bash. Om du vill lära dig mer om bash scripting kan du kolla in vår nybörjarguide till bash scripting.

Använda launchd

Skript i launchd utlöses av jobbdefinitioner som är .plist-filer lagrade i specifika kataloger. Dessa XML-filer ger jobbet ett namn, ange det skript som ska lanseras och ange när manuset ska köras. När du har skrivit ditt skript skriver du och laddar en jobbdefinition som startar skriptet vid den aktuella tiden.

En jobbdefinition ser något ut som vad som står nedan:

 Märka  local.restart  Program  /Users/user/Scripts/restart.sh  RunAtLoad 

Ändra vid behov, lägg sedan det i en textfil med .plist-förlängningen innan du släpper den i rätt katalog (se nedan).

Det finns några viktiga delar till arbetsbeskrivningen:

  • Etikett: namnet på jobbet inom launchd. Måste vara unikt för varje jobb. Dessa är skrivna i omvänd domännotation, och "local" är en utmärkt domän för privata agenter.
  • Program: Skriptets hela sökväg lanserar denna arbetsbeskrivning.
  • RunAtLoad: beskriver när skriptet ska köras. Det finns några olika alternativ här:
    • RunAtLoad : kör så fort jobbdefinitionen är laddad. Körs en gång per last.
    • StartInterval : starta jobbet varje n sekund. Detta exempel kommer att köra jobbet var 7200 sekunder eller var 2: e timme.
       StartInterval  7200 
    • StartCalendarInterval : kör jobbet på ett visst datum och datum. Koden nedan kommer att köra jobbet varje dag klockan 9.
       StartCalendarInterval  Timme  9  Minut  0 

Agenter mot daemoner

När du har skrivit din arbetsbeskrivning måste du spara den i lämplig katalog.

lanserar ytterligare särskiljer mellan agenter och daemoner. En agent körs på uppdrag av den inloggade användaren, medan en demon körs under root-användaren. Det innebär att om du vill begränsa ett skript till ett visst användarkonto kan du använda en agent. Om du vill ha något att springa oavsett vem som är inloggad, använder du en demon.

Skillnaden mellan agenter och daemoner är drog från var de är sparade på datorn:

  • "~ / Library / LaunchAgents" körs på uppdrag av den inloggade användaren
  • "/ Library / LaunchDaemons" körs för ruttanvändarnas räkning

Du måste spara din plist på rätt plats.

Laddar jobb i launchctl

När du har skapat dina skript och sparat din agent på rätt ställe måste du ladda det i launchctl . Detta kommer att hända automatiskt på inloggningar i framtiden.

För att se vad som för närvarande körs i laucnhctl kan du använda launchctl list i terminalen. Den här jättelistan kan greppas för ditt manus genom att märka det med något som följande:

 launchctl lista | grep local.restart 

För att ladda ett skript öppnar du Terminal och använder följande kommando:

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

För att ta bort manuset från launchctl-köen, använd kommandot unload :

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

Om du lägger ett jobb läggs det in i lanseringskön, och jobbet körs vid den tid som anges i lanseringsförhållandena. Om du vill köra ett skript omedelbart oavsett vad du ska använda kommandot "start":

 launchctl starta local.restart 

Detta kommando tar jobbet etikett och fungerar bara om jobbet redan har laddats in i launchctl .

Slutsats

Du kan använda launchd för att skapa skript som gör saker som att rengöra filer, starta om servern på ett schema eller kör ett program när en viss fil visas. För att lära dig mycket mer om att starta, kan du kolla in laucnh-handledningen.

Bildkredit: Maxwell's_demon