Jak używać Launchd do planowania uruchamiania skryptów na komputerze Mac

Jak używać Launchd do planowania uruchamiania skryptów na komputerze Mac

Automatyzacja zadań poprzez planowanie skryptów to potężna funkcja, na której codziennie polega wielu administratorów. Zwykli użytkownicy komputerów Mac mogą również wykorzystać tę moc za pomocą launchd, preferowanego przez Apple narzędzia do automatyzacji zadań i zarządzania w systemie macOS. Od planowania prostych zadań, takich jak wyłączanie Wi-Fi o określonej godzinie, po wykonywanie złożonych kopii zapasowych systemu, uruchamiany na komputerze Mac może pomóc zautomatyzować przepływy pracy, zaoszczędzić czas i zapewnić, że system będzie działał tak, jak lubisz.

Co jest uruchomione?

Tak jak orkiestra potrzebuje dyrygenta, który poprowadzi i zharmonizuje różnorodne instrumenty, macOS Ventura , z niezliczonymi procesami i usługami, polega na launchd, aby zapewnić, że wszystko gra perfekcyjnie. Jako pierwszy proces uruchamiany przez jądro macOS podczas uruchamiania komputera, launchd zajmuje centralne miejsce, koordynując każdy kolejny proces, usługę i aplikację, podobnie jak dyrygent sygnalizujący początek symfonii z początkowym podniesieniem batuty.

Poza swoją rolą w orkiestracji systemu, launchd może być używany do planowania skryptów, serii poleceń napisanych w celu wykonania określonego zadania. Odbywa się to za pomocą launchctlpolecenia, które służy jako interfejs dla użytkowników do komunikacji i kierowania uruchamianym dyrygentem.

Demony i agenci

launchd jest czasami określany jako demon, program komputerowy działający jako proces w tle i zazwyczaj nie jest przeznaczony do bezpośredniej kontroli przez użytkownika. Jeśli chodzi o demony, launchd jest wyjątkowy, ponieważ jest mistrzem wszystkich innych demonów macOS i może decydować, kiedy się uruchamiają i kończą. Te podrzędne demony działają pod kontrolą użytkownika root, więc mogą zrobić prawie wszystko.

Grafika Maxwell Demon Wiki
Źródło obrazu: Wikipedia

Jednak jako użytkownik zainteresowany planowaniem zadań uruchamianie skryptów z uprawnieniami użytkownika root nie zawsze jest pożądane lub konieczne. Tutaj do gry wkraczają agenci. Agenci działają w imieniu zalogowanego użytkownika, oferując bardziej ograniczone środowisko i zapewniając, że skrypty lub zadania są wykonywane z uprawnieniami i preferencjami tego konkretnego użytkownika. Na przykład, jeśli chcesz uruchomić skrypt, który zmienia ustawienia lub uzyskuje dostęp do plików na Twoim koncie, użyjesz agenta.

Pisanie skryptów

Aby uruchomić agentów lub demony przez launchd, musisz napisać kilka skryptów. Najpopularniejszym językiem skryptowym jest bash. Jeśli chcesz dowiedzieć się więcej o skryptach bash, zapoznaj się z naszym przewodnikiem po skryptach bash dla początkujących .

uruchomd-code-scriptto

Twoje uruchomione skrypty mogą znajdować się w dwóch różnych lokalizacjach, w zależności od tego, czy mają być uruchamiane jako agenci, czy demony:

  • Dla tych skryptów, które mają być agentami, działającymi w imieniu zalogowanego użytkownika, powinny być przechowywane w „~/Library/LaunchAgents”.
  • I odwrotnie, skrypty, które mają działać jako demony, w całym systemie operacyjnym, niezależnie od zalogowanego użytkownika, należą do „/Library/LaunchDaemons”.

Pamiętaj, że agenci nie mają uprawnień administratora, więc nie mogą wykonywać zadań wymagających głębokiego dostępu do systemu. Z drugiej strony demony działają z uprawnieniami administratora i mogą obsługiwać zadania, które wpływają na cały system.

Opisy stanowisk pracy

opis-zadania-skryptów-uruchomionych

Skrypty w launchd są wyzwalane przez definicje zadań, którymi są. plist przechowywane w określonych katalogach. Te pliki XML nadają zadaniu nazwę, określają skrypt, który ma zostać uruchomiony, oraz wskazują, kiedy skrypt powinien zostać uruchomiony. Po napisaniu skryptu napiszesz i załadujesz definicję zadania, która uruchomi skrypt w odpowiednim czasie. Definicja zadania wygląda mniej więcej tak:

<?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>

Zmodyfikuj w razie potrzeby, a następnie umieść go w pliku tekstowym z rozszerzeniem . plist przed upuszczeniem go do właściwego katalogu (patrz wyżej).

Opis stanowiska pracy składa się z kilku kluczowych części:

  • Etykieta: nazwa zadania w ramach launchd. Musi być unikalny dla każdego zadania. Są one zapisane w odwrotnej notacji domeny, a „lokalna” to świetna domena dla prywatnych agentów.
  • Program: pełna ścieżka skryptu uruchamianego przez ten opis stanowiska.
  • RunAtLoad: opisuje, kiedy skrypt powinien zostać uruchomiony. Istnieje kilka różnych opcji:
    • RunAtLoad: uruchom natychmiast po załadowaniu definicji zadania. Działa tylko raz na obciążenie.
    • StartInterval: uruchamia zadanie co n sekund. Ten przykład uruchomi zadanie co 7200 sekund lub co 2 godziny.<key>StartInterval</key> <integer>7200</integer>
    • StartCalendarInterval: uruchom zadanie w określonym czasie i dniu. Poniższy kod będzie uruchamiał zadanie codziennie o godzinie 9:00.<key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>9</integer> <key>Minute</key> <integer>0</integer> </dict>

Ładowanie zadań do launchctl

launchd-scripts-launchctl-list

Po utworzeniu skryptów i zapisaniu agenta we właściwym miejscu musisz załadować go do pliku launchctl. W przyszłości stanie się to automatycznie podczas logowania.

Aby zobaczyć, co aktualnie działa w laucnhctl, możesz użyć launchctl listw terminalu. Tę gigantyczną listę można wyszukać w skrypcie, oznaczając ją w następujący sposób:

launchctl list | grep local.restart

Aby załadować skrypt, otwórz Terminal i użyj następującego polecenia:

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

launchd-scripts-launchctl-load

Aby usunąć skrypt z kolejki launchctl, użyj unloadpolecenia:

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

launchd-scripts-launchctl-unload

Załadowanie zadania umieszcza je w kolejce uruchamiania, a zadanie zostanie uruchomione w czasie określonym w warunkach jego uruchomienia. Jeśli chcesz natychmiast uruchomić skrypt bez względu na wszystko, powinieneś użyć polecenia „start”:

launchctl start local.restart

To polecenie pobiera etykietę zadania i będzie działać tylko wtedy, gdy zadanie zostało już załadowane do pliku launchctl.

Często Zadawane Pytania

Jak mogę sprawdzić, czy launchd uruchomił skrypt?

Możesz użyć launchctl listpolecenia w terminalu. Spowoduje to wyświetlenie wszystkich załadowanych zadań. Aby znaleźć konkretny skrypt lub zadanie, użyj grepnp. launchctl list | grep your_script_name.

Co zrobić, jeśli launchd zużywa zbyt wiele zasobów systemowych?

Jeśli program launchd zużywa nadmierne zasoby, jest to zazwyczaj spowodowane nieprawidłowym działaniem skryptu lub zadania. Powinieneś przejrzeć ostatnio dodane skrypty i zwolnić je za pomocą launchctl unload /path/to/job.plist.

Jaka jest różnica między cronem a launchd?

Zarówno cron, jak i launchd to usługi planowania, ale działają inaczej. cron to starszy program do planowania zadań oparty na Uniksie, który uruchamia zadania w ustalonych godzinach lub odstępach czasu zdefiniowanych w pliku crontab. launchd to nowszy system Apple dla systemu macOS, który może uruchamiać zadania na podstawie różnych wyzwalaczy – nie tylko czasu.

Czy mogę używać innych języków skryptowych oprócz bash z launchd?

launchd może wykonać dowolny skrypt, który można uruchomić z terminala. Obejmuje to skrypty napisane w Pythonie, Perlu, Ruby i innych językach.

Źródło obrazu: Pexels . Wszystkie zrzuty ekranu autorstwa Davida Morelo.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *