Автоматизация задач с помощью сценариев — это мощная возможность, на которую многие администраторы полагаются каждый день. Обычные пользователи Mac также могут воспользоваться этой возможностью с помощью launchd, предпочтительного инструмента Apple для автоматизации задач и управления ими в macOS. От планирования простых задач, таких как отключение Wi-Fi в определенный час, до выполнения сложных резервных копий системы, launchd на Mac поможет вам автоматизировать рабочие процессы, сэкономить время и гарантировать, что ваша система будет работать так, как вам нравится.
Что запущено?
Подобно тому, как оркестру требуется дирижер, который будет руководить и гармонизировать различные инструменты, macOS Вентура с его множеством процессов и сервисов полагается на launchd, чтобы гарантировать, что все играет идеально. Являясь первым процессом, запускаемым ядром macOS при загрузке компьютера, launchd занимает центрально
Contents
Что запущено?
дый последующий процесс, службу и приложение, подобно дирижеру, сигнализирующему о начале симфонии первым поднятием эстафеты.Помимо своей роли в оркестрации системы, launchd можно использовать для планирования сценариев — серии команд, написанных для выполнения конкретной задачи. Это делается с помощью команды launchctl
, которая служит интерфейсом для общения пользователей и управления запускаемым проводником.
Полезно знать : скачиваете торренты? Повысьте эффективность на загрузка торрентов с помощью Терминала на вашем Mac .
Демоны и агенты
launchd иногда называют демоном — компьютерной программой, которая запускается как фоновый процесс и обычно не предназначена для прямого управления пользователем. Что касается демонов, то launchd является особенным, поскольку он является главой всех других демонов macOS и может решать, когда они запускаются и останавливаются. Эти подчиненные демоны запускаются от имени пользователя root, поэтому они могут делать практически все.
![Максвелл Демон Вики Графика](https://saintist.ru/wp-content/uploads/2024/05/maxwell-demon-wiki-graphic.jpg)
Однако для пользователя, заинтересованного в планировании задач, запуск сценариев от имени пользователя root не всегда желателен или необходим. Здесь в игру вступают агенты. Агенты запускаются от имени вошедшего в систему пользователя, предлагая более ограниченную среду и гарантируя, что сценарии или задачи выполняются с разрешениями и предпочтениями этого конкретного пользователя. Например, если вы хотите, чтобы запускался скрипт, который изменяет настройки или получает доступ к файлам в вашей учетной записи, вам следует использовать агент.
Совет. У вас возникли проблемы совместимости с некоторыми из ваших любимых давних приложений для Mac? Откройте для себя как установДемоны и агенты
тарый Mac .
Написание сценариев
Чтобы запускать агенты или демоны через launchd, вам потребуется написать несколько сценариев. Самый распространенный язык сценариев — bash. Если вы хотите узнать больше о написании сценариев Bash, посетите наш раздел руководство для начинающих по написанию сценариев bash .
![запускd-код-scriptto](https://saintist.ru/wp-content/uploads/2024/05/run-python-script-mac-featured.jpg)
Ваши сценарии запуска могут находиться в двух разных местах, в зависимости от того, предназначены ли они для запуска в качестве агентов или демонов:
- Для тех сценариев, которые предназначены для агентов, действующих от имени вошедшего в систему пользователя, они должны храниться в «~/Library/LaunchAgents».
- И наоборот, сценарии, предназначенные для работы в качестве демонов в масштабах всей операционной системы независимо от вошедшего в систему пользователя, относятся к «/Library/LaunchDaemons».
Помните, что у агентов нет root-прав, поэтому они не могут выполнять задачи, требующие глубокого доступа к системе. С другой стороны, демоны запускаются с правами root и могут выполнять задачи, влияющие на всю систему.
Полезно знать : вы можете получить более глубокий контроль над своим Mac с помощью включение root-пользователя , получив доступ ко всей его файловой системе.
Описание вакансии
![launchd-скрипты-описание-работы](https://saintist.ru/wp-content/uploads/2024/05/launchd-scripts-job-description.png)
Скрипты в launchd запускаются определениями заданий, которые представляют собой файлы.plist, хранящиеся в определенных каталогах. Эти XML-файлы дают заданию имя, определяют сценарий, который следует запустить, и указывают, когда этот сценарий следует запускать. Написав сценарий, вы должны написать и загрузить определение задания, которое запускает сценарий в нужное время. Определение должности выглядит примерно так:
<?xml version="1.0" encoding="UTF-8"Написание сценариевn><!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>
Измените при необходимости, затем поместите его в текстовый файл с расширением.plist, а затем поместите в правильный каталог (см. выше).
Описание вакансии состоит из нескольких ключевых частей:
- Ярлык: имя задания в launchd. Должно быть уникальным для каждого задания. Они написаны в обратной доменной записи, а «local» — отличный домен для частных агентов.
- Программа : полный путь к скрипту, который запускает это описание вакансии.
- RunAtLoad: описывает, когда следует запустить сценарий. Здесь есть несколько разных вариантов:
- RunAtLoad: запускается сразу после загрузки определения задания. Запускается только один раз за загрузку.
- StartInterval: запуск задания каждые nсекунд.
- StartCalendarInterval: запуск задания в определенное время и дату.
Совет : нужно больше места для файлов сценариев? Узнайте как очистить кеш на Mac, чтобы быстро освободить место .
Загрузка заданий в launchctl
![launchd-scripts-launchctl-list](https://saintist.ru/wp-content/uploads/2024/05/launchd-scripts-launchctl-list.png)
После того как вы создали скрипты и сохранили агент в нужном месте, вам нужно будет загрузить его в launchctl
. В будущем это будет происход
Описание вакансии
е в систему.Чтобы увидеть, что в данный момент выполняется в Laucnhctl, вы можете использовать launchctl list
в терминале. Этот гигантский список можно найти для вашего скрипта, пометив его примерно так:
launchctl list | grep local.restart
Чтобы загрузить скрипт, откройте Терминал и используйте следующую команду:
launchctl load ~/Library/LaunchAgents/local.restart.plist
![launchd-скрипты-launchctl-загрузка](https://saintist.ru/wp-content/uploads/2024/05/launchd-scripts-launchctl-load.png)
Чтобы удалить скрипт из очереди запуска, используйте команду unload
:
launchctl unload ~/Library/LaunchAgents/local.restart.plist
![launchd-скрипты-launchctl-выгрузить](https://saintist.ru/wp-content/uploads/2024/05/launchd-scripts-launchctl-unload.png)
Загрузка задания помещает его в очередь запуска, и задание будет запущено во время, указанное в его условиях запуска. Если вы хотите запустить скрипт немедленно, несмотря ни на что, вам следует использовать команду «старт»:
launchctl start local.restart
Эта команда принимает метку задания и будет работать только в том случае, если задание уже загружено в launchctl
.
Совет. Станьте опытным пользователем Mac, используя Рейкаст или Альфред для быстрого запуска любимых приложений.
Часто задаваемые вопросы
Как проверить, запустил ли launchd скрипт?
Вы можете использовать команду launchctl list
в терминале. Это отобразит все загруженные задания. Чтобы найти конкретный сценарий или задание, используйте grep
, например, launchctl list | grep your_script_name
.
Что, если launchd использует слишком много системных ресурсов?
Если launchd потребляет слишком много ресурсов, обычно это связано с некорректным поведением сценария или задания. Вам следует просмотреть недавно добавленные скрипты и выгрузить их с помощью launchctl unload /path/to/job.plist
.
В чем разница между cron и launchd?
<див>
И cron, и launchd являются службами планирования, но работают по-разному. cron — это старый планировщик заданий на базе Unix, который запускает задания в фиксированное время или с интервалами, указанными в файле crontab. launchd — это новая система Apple для macOS, которая может запускать задания на основе различных триггеров, а не только времени.
Могу ли я использовать с launchd другие языки сценариев, кроме bash?
launchd может выполнить любой скрипт, который можно запустить с терминала. Сюда входят сценарии, написанные на Python, Perl, Ruby и других языках.
Изображение предоставлено: Пексели . Все скриншоты Дэвида Морело.