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ą launchctl
polecenia, 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.
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 .
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
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
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 list
w 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
Aby usunąć skrypt z kolejki launchctl, użyj unload
polecenia:
launchctl unload ~/Library/LaunchAgents/local.restart.plist
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 list
polecenia w terminalu. Spowoduje to wyświetlenie wszystkich załadowanych zadań. Aby znaleźć konkretny skrypt lub zadanie, użyj grep
np. 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