launchd is een hulpmiddel voor het starten, stoppen en beheren van scripts en processen. Als u met een versie van Linux hebt gewerkt, bent u wellicht bekend met cron. launchd is eigenlijk cron in macOS.

Wat zijn daemons?

Daemons (uitgesproken als "demons") zijn scripts die op de achtergrond worden uitgevoerd. In tegenstelling tot toepassingen worden daemons als processen uitgevoerd en vallen niet onder de directe controle van de gebruiker of een andere toepassing. Op macOS staan ​​ze onder het commando van het launchd-framework dat beslist wanneer ze beginnen en stoppen.

De ongebruikelijke naam komt van Maxwell's demon, een denkbeeldig middel dat moleculen sorteert in een thermodynamica gedachte-experiment.

Scripts schrijven

Om daemons via launchd te kunnen uitvoeren, moet je wat scripts schrijven. De meest voorkomende scripttaal is bash. Als je meer wilt weten over bash scripting, kun je onze beginnershandleiding voor bash scripting bekijken.

Gebruik van de launchd

Scripts in launchd worden geactiveerd door taakdefinities die .plist-bestanden zijn die zijn opgeslagen in specifieke mappen. Deze XML-bestanden geven de taak een naam, specificeren het script dat moet worden gestart en geven aan wanneer het script moet worden uitgevoerd. Nadat u uw script hebt geschreven, schrijft en laadt u een taakdefinitie waarmee het script op het juiste moment wordt gestart.

Een taakdefinitie lijkt op wat er hieronder staat:

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

Pas indien nodig aan en plaats het vervolgens in een tekstbestand met de .plist-extensie voordat u het in de juiste map plaatst (zie hieronder).

Er zijn een paar belangrijke onderdelen van de functiebeschrijving:

  • Label: de naam van de taak binnen de launchd. Moet uniek zijn voor elke taak. Deze zijn geschreven in omgekeerde domeinnotatie en 'lokaal' is een geweldig domein voor privé-agenten.
  • Programma: het volledige pad van het script dat deze functiebeschrijving lanceert.
  • RunAtLoad: beschrijft wanneer het script moet worden uitgevoerd. Er zijn een paar verschillende opties hier:
    • RunAtLoad : wordt uitgevoerd zodra de taakdefinitie is geladen. Draait slechts één keer per belasting.
    • StartInterval : start de taak elke n seconden. In dit voorbeeld wordt de taak elke 7200 seconden of elke 2 uur uitgevoerd.
       StartInterval  7200 
    • StartCalendarInterval : voer de taak uit op een specifieke tijd en datum. De onderstaande code voert de taak elke dag om 9 uur uit.
       StartCalendarInterval  Uur  9  Minuut  0 

Agenten versus daemons

Nadat u uw taakomschrijving hebt geschreven, moet u deze opslaan in de juiste map.

launchd maakt verder onderscheid tussen agents en daemons. Een agent wordt uitgevoerd namens de ingelogde gebruiker, terwijl een daemon wordt uitgevoerd onder de rootgebruiker. Dit betekent dat als u een script wilt beperken tot een specifiek gebruikersaccount, u een agent kunt gebruiken. Als u wilt dat er iets wordt uitgevoerd, ongeacht wie is aangemeld, gebruikt u een daemon.

Het verschil tussen agenten en daemons wordt getekend van waar ze worden opgeslagen op de computer:

  • "~ / Library / LaunchAgents" wordt uitgevoerd namens de ingelogde gebruiker
  • "/ Library / LaunchDaemons" wordt uitgevoerd namens de rootgebruikers

U moet uw plist op de juiste locatie opslaan.

Taken laden in launchctl

Zodra u uw scripts hebt gemaakt en uw agent op de juiste plaats hebt opgeslagen, moet u deze in launchctl . Dit gebeurt automatisch bij aanmeldingen in de toekomst.

Als u wilt zien wat er momenteel in Laucnhctl wordt uitgevoerd, kunt u de launchctl list in de terminal gebruiken. Deze gigantische lijst kan worden geamplificeerd voor je script door het te labelen met iets als het volgende:

 launchctl lijst | grep local.restart 

Om een ​​script te laden, opent u Terminal en gebruikt u de volgende opdracht:

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

Om het script uit de launchctl-wachtrij te verwijderen, gebruikt u de opdracht unload :

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

Als een taak wordt geladen, wordt deze in de opstartwachtrij geplaatst en wordt de taak uitgevoerd op het tijdstip dat is opgegeven in de startvoorwaarden. Als u onmiddellijk een script wilt uitvoeren, moet u de opdracht "start" gebruiken:

 launchctl start local.restart 

Deze opdracht neemt het label van de taak en werkt alleen als de taak al in launchctl is geladen.

Conclusie

U kunt launchd gebruiken om scripts te maken die dingen doen zoals het opschonen van bestanden, het opnieuw opstarten van uw server volgens een planning of het uitvoeren van een toepassing wanneer een bepaald bestand verschijnt. Om meer te leren over launchd, kun je de laucnhd-tutorial bekijken.

Afbeeldingscredit: Maxwell's_demon