ГлавнаяОперационные системыMacOSКак использовать Launchd для планирования сценариев запуска на Mac

Как использовать Launchd для планирования сценариев запуска на Mac

Автоматизация задач с помощью сценариев — это мощная возможность, на которую многие администраторы полагаются каждый день. Обычные пользователи Mac также могут воспользоваться этой возможностью с помощью launchd, предпочтительного инструмента Apple для автоматизации задач и управления ими в macOS. От планирования простых задач, таких как отключение Wi-Fi в определенный час, до выполнения сложных резервных копий системы, launchd на Mac поможет вам автоматизировать рабочие процессы, сэкономить время и гарантировать, что ваша система будет работать так, как вам нравится.

Что запущено?

Подобно тому, как оркестру требуется дирижер, который будет руководить и гармонизировать различные инструменты, macOS Вентура с его множеством процессов и сервисов полагается на launchd, чтобы гарантировать, что все играет идеально. Являясь первым процессом, запускаемым ядром macOS при загрузке компьютера, launchd занимает центрально

Что запущено?

дый последующий процесс, службу и приложение, подобно дирижеру, сигнализирующему о начале симфонии первым поднятием эстафеты.

Помимо своей роли в оркестрации системы, launchd можно использовать для планирования сценариев — серии команд, написанных для выполнения конкретной задачи. Это делается с помощью команды launchctl, которая служит интерфейсом для общения пользователей и управления запускаемым проводником.

Полезно знать : скачиваете торренты? Повысьте эффективность на загрузка торрентов с помощью Терминала на вашем Mac .

Демоны и агенты

launchd иногда называют демоном — компьютерной программой, которая запускается как фоновый процесс и обычно не предназначена для прямого управления пользователем. Что касается демонов, то launchd является особенным, поскольку он является главой всех других демонов macOS и может решать, когда они запускаются и останавливаются. Эти подчиненные демоны запускаются от имени пользователя root, поэтому они могут делать практически все.

Максвелл Демон Вики Графика

Однако для пользователя, заинтересованного в планировании задач, запуск сценариев от имени пользователя root не всегда желателен или необходим. Здесь в игру вступают агенты. Агенты запускаются от имени вошедшего в систему пользователя, предлагая более ограниченную среду и гарантируя, что сценарии или задачи выполняются с разрешениями и предпочтениями этого конкретного пользователя. Например, если вы хотите, чтобы запускался скрипт, который изменяет настройки или получает доступ к файлам в вашей учетной записи, вам следует использовать агент.

Совет. У вас возникли проблемы совместимости с некоторыми из ваших любимых давних приложений для Mac? Откройте для себя как установ

Демоны и агенты

тарый Mac .

Написание сценариев

Чтобы запускать агенты или демоны через launchd, вам потребуется написать несколько сценариев. Самый распространенный язык сценариев — bash. Если вы хотите узнать больше о написании сценариев Bash, посетите наш раздел руководство для начинающих по написанию сценариев bash .

запускd-код-scriptto

Ваши сценарии запуска могут находиться в двух разных местах, в зависимости от того, предназначены ли они для запуска в качестве агентов или демонов:

  • Для тех сценариев, которые предназначены для агентов, действующих от имени вошедшего в систему пользователя, они должны храниться в «~/Library/LaunchAgents».
  • И наоборот, сценарии, предназначенные для работы в качестве демонов в масштабах всей операционной системы независимо от вошедшего в систему пользователя, относятся к «/Library/LaunchDaemons».

Помните, что у агентов нет root-прав, поэтому они не могут выполнять задачи, требующие глубокого доступа к системе. С другой стороны, демоны запускаются с правами root и могут выполнять задачи, влияющие на всю систему.

Полезно знать : вы можете получить более глубокий контроль над своим Mac с помощью включение root-пользователя , получив доступ ко всей его файловой системе.

Описание вакансии

launchd-скрипты-описание-работы

Скрипты в 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

После того как вы создали скрипты и сохранили агент в нужном месте, вам нужно будет загрузить его в launchctl. В будущем это будет происход

Описание вакансии

е в систему.

Чтобы увидеть, что в данный момент выполняется в Laucnhctl, вы можете использовать launchctl listв терминале. Этот гигантский список можно найти для вашего скрипта, пометив его примерно так:

launchctl list | grep local.restart

Чтобы загрузить скрипт, откройте Терминал и используйте следующую команду:

launchctl load ~/Library/LaunchAgents/local.restart.plist
launchd-скрипты-launchctl-загрузка

Чтобы удалить скрипт из очереди запуска, используйте команду unload:

launchctl unload ~/Library/LaunchAgents/local.restart.plist
launchd-скрипты-launchctl-выгрузить

Загрузка задания помещает его в очередь запуска, и задание будет запущено во время, указанное в его условиях запуска. Если вы хотите запустить скрипт немедленно, несмотря ни на что, вам следует использовать команду «старт»:

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 и других языках.

Изображение предоставлено: Пексели . Все скриншоты Дэвида Морело.

Загрузка заданий в launchctl

Часто задаваемые вопросы

Как проверить, запустил ли launchd скрипт?

Что, если launchd использует слишком много системных ресурсов?

В чем разница между cron и launchd?

Могу ли я использовать с launchd другие языки сценариев, кроме bash?

ПОХОЖИЕ СТАТЬИ

Популярные записи