Launchd. Автозапуск программ при загрузке Mac OS X

Сейчас поболтаем про автозапуск программ при загрузке Mac OS X. Статья запланирована на продвинутых пользователей и тех кто пытается к этому уровню. В MacOS X имеется встроенное ответ для исполнения автоматизации разных действий — Automator. Программа весьма продвинутая в умелых руках, о которой возможно писать целые книги, но сейчас обращение отправится о втором.

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

Недавно, я писал про ограничение оборотов кулера на Mac, таким методом возможно снизить шум на MacBook, Mac mini либо iMac. Остался, действительно, не раскрытым один достаточно серьёзный вопрос, в частности, как автоматизировать запуск отечественной утилиты, управляющей работой кулера? Согласитесь, не весьма комфортно всегда лезть в консоль и запускать её вручную. Так что, предлагаю на этом конкретном примере разобраться с Launchd и ознакомиться с демонами и сервисами в Mac OS X.

Services (сервисы) и Daemons (демоны) Mac OS X.

Для начала мало теории. «демоны» и «Сервисы» являются системными работами и снабжают работу совокупности, но предназначены мало для различных целей, соответственно и трудятся также по-различному. Давайте разберемся, что конкретно делают демоны «и» эти «сервисы» и в чем отличие между ними?

Начнем с того, что делают они фактически всё, начиная с запуска WEB-сервера и заканчивая монтированием файловых совокупностей и запуском графической оболочки.

Отличие же между ними в том, что «сервисы», в большинстве случаев, запускаются по окончании загрузки графического интерфейса и предназначены, по большей части, для запуска графических приложений; «демоны» смогут запускаться до загрузки графики, в фоновом режиме и предназначены запуска bash/shell скриптов, серверов (работ) и всевозможных консольных утилит.

Сервисы являются конфигурационные XML файлы с расширением .plist, каковые на протяжении загрузки Mac OS обрабатываются и запускаются фоновым процессом launchd. Файлы .plist находятся в директориях LaunchAgents либо LaunchDaemons (в зависимости от их назначения). В совокупности имеется пара директорий LaunchAgents и LaunchDaemons.

Это главный момент в понимании того как происходит работа совокупности и его стоит разглядеть подробнее:

~/Library/LaunchAgents

Все конфигурационные файлы, находящиеся в данной директории, выполняются при входе в совокупность (логине) КОНКРЕТНОГО пользователя (в каталоге которого они находятся) и с правами этого пользователя, не затрагивая наряду с этим других пользователей и систему.

/Library/LaunchAgents

Системная директория. Все находящиеся в ней конфигурационные файлы исполняются при логине ЛЮБОГО пользователя с правами вошедшего пользователя.

/Library/LaunchDaemons

Опять системная директория, но все конфиги исполняются от лица администратора (root) на уровне совокупности.

Программа либо сценарий будет выполнен независимо от того, вошёл какой-либо пользователь в совокупность либо нет. Это и имеется необходимый нам вариант.

/System/Library/LaunchAgents

Системная директория зарезервированная OS X. Все конфиги находящиеся в ней являются системными, запускаются при логине любого пользователя. Лучше ко мне не лезть без потребности.

/System/Library/LaunchAgents

Системная директория зарезервированная OS X. Все конфиги, находящиеся в ней, являются системными и запускаются при загрузке совокупности с правами root. Ко мне также не следует лезть.

Как вы уже додумались, директории LaunchAgents употребляются для запуска «сервисов», а LaunchDaemons — для запуска «демонов».

Файлы конфигурации .plist

Как уже говорилось, все конфигурационные .plist-файлы запускаются фоновым процессом launchd на протяжении загрузки OS X.

Сами по себе .plist-файлы всего лишь «сценарии», комплект неких правил, для запуска вторых приложений и не являются независимыми программами, но отличаются функциональностью и гибкостью в настройке. Пора разглядеть пример, собственный файл сценария я назвал my.fancontrol.plist:

Label FanControl ProgramArguments /Applications/smcFanControl.app/Contents/Resources/smc -k F0Mx -w 36b0 RunAtLoad

До тех пор пока по большому счету ничего не ясно, ну это мы на данный момент поправим. Напомню задачу — нужно при запуске Mac OS X, до входа пользователя в совокупность (в противном случае какая-то несправедливость окажется) в терминале выполнить команду:

/Applications/smcFanControl.app/Contents/Resources/smc -k F0Mx -w 36b0

Тем самым мы запускаем утилиту smc и передаем ей два параметра — показываем кулер и выставляем ему большую частоту оборотов.

Выше вы видите оказавшийся код отечественного сценария со стандартной шапкой формата XML (для демонов и всех служб она однообразна).

Что я тут понаписал? Итак, параметры и основные ключи .plist-файла:

Label FanControl

Ключ «Label» задаёт наименование сервиса, которое будет отображаться в Мониторинге совокупности либо логах утилиты Консоль.

ProgramArguments /Applications/smcFanControl.app/Contents/Resources/smc -k F0Mx -w 36b0

Ключ «ProgramArguments» содержит массив, в котором указаны путь к исполняемому файлу (либо bash/shell скрипту) и параметры его запуска. Увидьте, что любой параметр нужно записывать раздельно.

RunAtLoad

Ключ «RunAtLoad» показывает совокупности, что правило необходимо выполнить при загрузке ОС.

Имеется еще большое количество параметров и всяких ключей, к примеру для запуска приложения по расписанию либо через определенные промежутки времени. Данной статьёй я даю только толчок для понимания предстоящего изучения Launchd в OS X и не ставлю целью создать полноценное управление.

файл создан.

Осталось переместить его в папку-назначение (/Library/LaunchDaemons), исправить права доступа и атрибуты, и перезагрузиться. В терминале пишем:

#делаем действия от root sudo -s #перемещаем файл сценария mv ~/Desktop/my.fancontrol.plist /Library/LaunchDaemons/ #правим права доступа chown root:wheel /Library/LaunchDaemons/my.fancontrol.plist #правим атрибуты chmod 755 /Library/LaunchDaemons/my.fancontrol.plist

Активировать либо дезактивировать трудящийся сценарии возможно сделав команды:

#launchctl load /Library/LaunchDaemons/[имя.вашего.файла].plist #launchctl unload /Library/LaunchDaemons/[имя.вашего.файла].plist

Напоследок, как в большинстве случаев, ссылочка на хорошую статью про способы автозагрузки приложений в Mac OS X. LaunchAgents и LaunchDaemons.

Комментарии и уведомления в настоящее время закрыты..

Комментарии закрыты.