Hoe Launchd te gebruiken om Run Scripts op Mac te plannen

Hoe Launchd te gebruiken om Run Scripts op Mac te plannen

Het automatiseren van taken door scripts te plannen is een krachtige mogelijkheid waar veel beheerders dagelijks op vertrouwen. Gewone Mac-gebruikers kunnen deze kracht ook gebruiken met launchd, de favoriete tool van Apple voor taakautomatisering en -beheer op macOS. Van het plannen van eenvoudige taken zoals het uitschakelen van wifi op een bepaald uur tot het uitvoeren van complexe systeemback-ups, launchd op Mac kan u helpen uw workflows te automatiseren, tijd te besparen en ervoor te zorgen dat uw systeem werkt zoals u dat wilt.

Wat is Launchd?

Net zoals een orkest een dirigent nodig heeft om de diverse instrumenten te begeleiden en te harmoniseren, vertrouwt macOS Ventura met zijn talloze processen en services op launchd om ervoor te zorgen dat alles perfect samenspel speelt. Als het eerste proces dat door de macOS-kernel wordt gestart wanneer je je computer opstart, staat launchd centraal en orkestreert het elk volgend proces, elke service en elke toepassing, net zoals een dirigent het begin van een symfonie signaleert met het eerste stokje.

Naast zijn rol in systeemorkestratie, kan launchd worden gebruikt om scripts te plannen, een reeks opdrachten die zijn geschreven om een ​​specifieke taak uit te voeren. Dit wordt gedaan met behulp van de launchctlopdracht, die dient als interface voor gebruikers om te communiceren en de dirigent te sturen die wordt gelanceerd.

Daemonen en agenten

launchd wordt soms een daemon genoemd, een computerprogramma dat wordt uitgevoerd als een achtergrondproces en dat doorgaans niet is ontworpen om rechtstreeks door een gebruiker te worden bestuurd. Wat daemons betreft, is launchd speciaal, omdat het de meester is van alle andere macOS-daemons en het kan beslissen wanneer ze starten en stoppen. Deze ondergeschikte daemons draaien onder de rootgebruiker, dus ze kunnen zo ongeveer alles doen.

Maxwell Demon Wiki-afbeelding
Bron afbeelding: Wikipedia

Als gebruiker die geïnteresseerd is in taakplanning, is het uitvoeren van scripts onder de rootgebruiker echter niet altijd wenselijk of noodzakelijk. Dit is waar agenten in het spel komen. Agents worden uitgevoerd namens een ingelogde gebruiker, bieden een beperktere omgeving en zorgen ervoor dat scripts of taken worden uitgevoerd met de machtigingen en voorkeuren van die specifieke gebruiker. Als u bijvoorbeeld wilt dat er een script wordt uitgevoerd dat instellingen wijzigt of bestanden binnen uw account opent, gebruikt u een agent.

Scripts schrijven

Om agents of daemons door launchd te laten lopen, moet je een aantal scripts schrijven. De meest gebruikte scripttaal is bash. Als je meer wilt weten over bash-scripting, kun je onze beginnershandleiding voor bash-scripting raadplegen .

launchd-code-scriptto

Uw gelanceerde scripts kunnen op twee verschillende locaties staan, afhankelijk van of ze bedoeld zijn om te worden uitgevoerd als agents of als daemons:

  • Voor die scripts die bedoeld zijn als agenten die handelen namens de ingelogde gebruiker, moeten ze worden opgeslagen in “~/Library/LaunchAgents”.
  • Omgekeerd horen scripts die bedoeld zijn om te functioneren als daemons, voor het hele besturingssysteem, ongeacht de ingelogde gebruiker, thuis in “/Library/LaunchDaemons”.

Onthoud dat agenten geen rootrechten hebben, dus ze kunnen geen taken uitvoeren waarvoor diepe systeemtoegang vereist is. Daemons daarentegen werken met rootrechten en kunnen taken uitvoeren die van invloed zijn op het hele systeem.

Werk omschrijving

launchd-scripts-taakomschrijving

Scripts in launchd worden geactiveerd door taakdefinities, die zijn. plist-bestanden 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 die het script op het juiste moment start. Een functiedefinitie ziet er ongeveer zo uit:

<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0">
<dict>
<key>Label</key>
<string>local.restart</string>
<key>Program</key>
<string>/Users/user/Scripts/restart.sh</string>
<key>RunAtLoad</key>
<true/>
</dict></plist>

Wijzig indien nodig en plaats het vervolgens in een tekstbestand met de . plist-extensie voordat u deze in de juiste map neerzet (zie hierboven).

Er zijn een paar belangrijke onderdelen van de taakomschrijving:

  • Label: de naam van de taak binnen 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 start.
  • RunAtLoad: beschrijft wanneer het script moet worden uitgevoerd. Er zijn hier een paar verschillende opties:
    • RunAtLoad: uitvoeren zodra de taakdefinitie is geladen. Draait slechts één keer per lading.
    • StartInterval: start de taak elke n seconden. In dit voorbeeld wordt de taak elke 7200 seconden of elke 2 uur uitgevoerd.<key>StartInterval</key> <integer>7200</integer>
    • StartCalendarInterval: voer de taak uit op een specifieke tijd en datum. De onderstaande code voert de taak elke dag om 9.00 uur uit.<key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>9</integer> <key>Minute</key> <integer>0</integer> </dict>

Taken laden in launchctl

launchd-scripts-launchctl-lijst

Zodra u uw scripts heeft gemaakt en uw agent op de juiste plaats heeft opgeslagen, moet u deze in launchctl. Dit zal in de toekomst automatisch gebeuren bij logins.

Om te zien wat er momenteel in laucnhctl draait, kunt u launchctl listin de terminal gebruiken. Deze gigantische lijst kan voor je script worden gebruikt door het te labelen met zoiets als het volgende:

launchctl list | grep local.restart

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

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

launchd-scripts-launchctl-load

Gebruik de opdracht om het script uit de launchctl-wachtrij te verwijderen unload:

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

launchd-scripts-launchctl-unload

Door een taak te laden, wordt deze in de startwachtrij geplaatst en wordt de taak uitgevoerd op het tijdstip dat is opgegeven in de startvoorwaarden. Als u hoe dan ook 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 is geladen in launchctl.

Veel Gestelde Vragen

Hoe kan ik controleren of launchd een script heeft gestart?

U kunt de launchctl listopdracht in de terminal gebruiken. Hierdoor worden alle geladen taken weergegeven. Om een ​​specifiek script of taak te vinden, gebruikt u grepbijvoorbeeld launchctl list | grep your_script_name.

Wat als launchd te veel systeembronnen gebruikt?

Als launchd buitensporig veel bronnen verbruikt, is dat meestal te wijten aan een script of taak die zich misdraagt. U moet de scripts bekijken die u onlangs heeft toegevoegd en ze verwijderen met behulp van launchctl unload /path/to/job.plist.

Wat is het verschil tussen cron en launchd?

Zowel cron als launchd zijn planningsservices, maar ze werken anders. cron is een oudere op Unix gebaseerde taakplanner die taken uitvoert op vaste tijden of intervallen die zijn gedefinieerd in een crontab-bestand. launchd is het nieuwere systeem van Apple voor macOS dat taken kan starten op basis van verschillende triggers – niet alleen tijd.

Kan ik naast bash ook andere scripttalen gebruiken met launchd?

launchd kan elk script uitvoeren dat vanaf de terminal kan worden uitgevoerd. Dit omvat scripts die zijn geschreven in Python, Perl, Ruby en andere talen.

Afbeelding tegoed: Pexels . Alle screenshots door David Morelo.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *