Sådan bruges launchd til at køre scripts på Schedule i macOS

Admin

launchd er et værktøj til at starte, stoppe og administrere scripts og processer. Hvis du har arbejdet med en hvilken som helst version af Linux, kender du muligvis cron. launchd er dybest set cron i macOS.

Hvad er dæmoner?

launchd-scripts-maxwells-demon

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

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

Skrivning af scripts

Sådan køres et Python -script i Mac OS X

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

Brug af launchd

launchd-scripts-job-description

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

En jobdefinition ligner hvad der er nedenfor:

version="1.0"indkodning="UTF-8"?>version="1.0">>>Etiket>>lokal. genstart>>Program>>/Users/user/Scripts/restart.sh>>RunAtLoad>/>>>

Rediger efter behov, og læg den derefter i en tekstfil med .plist -udvidelsen, før du taber den i det korrekte bibliotek (se nedenfor).

Der er et par vigtige dele til stillingsbeskrivelsen:

  • Etiket: navnet på jobbet inden lancering. Skal være unik for hvert job. Disse er skrevet i omvendt domænenotation, og "lokal" er et godt domæne for private agenter.
  • Program: hele stien til scriptet, som denne jobbeskrivelse lancerer.
  • 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 én gang pr. Last.
    • StartInterval: start jobbet hver n sekunder. Dette eksempel kører jobbet hvert 7200 sekund eller hver 2. time.
      >StartInterval>>7200>
    • StartCalendarInterval: køre jobbet på et bestemt tidspunkt og en bestemt dato. Nedenstående kode kører jobbet hver dag kl. 9.00.
      >StartCalendarInterval>>>Time>>9>>Minut>>0>>

Agenter vs. dæmoner

Når du har skrevet din stillingsbeskrivelse, skal du gemme den i det relevante bibliotek.

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

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

  • "~/Library/LaunchAgents" kører på vegne af den loggede bruger
  • "/Library/LaunchDaemons" kører på rodbrugernes vegne

Du skal gemme din plist på den korrekte placering.

Indlæser job i launchctl

launchd-scripts-launchctl-list

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

For at se, hvad der i øjeblikket kører i laucnhctl, kan du bruge launchctl liste i terminalen. Denne gigantiske liste kan hilses på dit script ved at mærke det med noget som følgende:

launchctl liste |grep lokal. genstart

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

launchctl load ~/Bibliotek/LaunchAgents/lokal.start.plist
launchd-scripts-launchctl-load

For at fjerne scriptet fra launchctl -køen skal du bruge losse kommando:

launchctl aflæsning  ~/Bibliotek/LaunchAgents/lokal.start.plist
launchd-scripts-launchctl-unload

Indlæsning af et job sætter det i startkøen, og jobbet kører på det tidspunkt, der er angivet i dets startbetingelser. Hvis du vil køre et script med det samme 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 launchctl.

Konklusion

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

Billedkredit: Maxwells_demon

Tilknyttet offentliggørelse: Make Tech Easier kan optjene provision på produkter købt via vores links, hvilket understøtter det arbejde, vi udfører for vores læsere.

Sådan nemt beskyttes PDF -filer med adgangskode i OS X
Sådan nemt beskyttes PDF -filer med adgangskode i OS X

Apple gjorde virkelig mange mennesker en tjeneste ved at inkludere "Print-to-PDF" -evnen i OS X. ...

Optag skærmbilleder uden faldskygger på din Mac
Optag skærmbilleder uden faldskygger på din Mac

Apple har gjort det virkelig let at tage skærmbilleder på en Mac. Du skal bare trykke på en taste...

Brug Apptivate til at øge din produktivitet
Brug Apptivate til at øge din produktivitet

Tastaturdrevne lanceringsprogrammer som Quicksilver og Alfred er en kraftfuld og superhurtig måde...