Меню Рубрики

Mac os автозапуск скрипта

Запускаем программы при запуске Mac OS X — Launchd


Начнем с истории. Жили были десяток программ для запуска процессов или программ. И тысячи скриптов к ним. Dave Zarzycki из Apple решил написать программу, которая отличалась бы от выше написанных и предлагала бы единый, стандартизированный интерфейс к любым программам запускающим автоматически системой и другие вкусности.

Вот и вся история. Теперь к самой программе.

Называется она Launchd. И она с открытом исходным кодом. Опен сорс.
Все процессы при старте системы(в Mac OS X) запускаются одним процессом launchd. При загрузке launchd вызывается ядром как первый процесс и дальше вся система стартует с помощью него. Так же Launchd следит за тем чтобы процесс был запущен. Если он вдруг упадет, Launchd ему поможет и поднимет его.

Для начала решим для чего нам нужно запустить что-либо при загрузке и когда это надо сделать.
Если вам нужно чтобы программа или процесс запустился при запуске системы и даже когда пользователь не вошел, то следует создать файл в папке /Library/LaunchDaemons. Если же нужно только когда вы вошли в систему то в папке /Library/LaunchAgents. Так же можно использовать и другие директории, но в данной статье мы не будем их касаться.

Давайте создадим Daemon для запуска php-fcgi процессов.
sudo mate /Library/LaunchDaemons/com.php-fcgi
И так что же нам туда писать?
Сначала уясним что Property List это Xml файл. И он должен быть валидным. Иначе ничего не будет работать.
В Textmate есть проверка валидности этих файлов, так что никаких пробелем возникнуть не должно.

В этом файле должны содержаться 3 обязательных ключа.
Label — уникальный идентификатор.

ProgramArguments — По сути это путь и параметры запускаемой программы.
Первая строка всегда путь к программе если не используется ключ Program.
Последующие строки будут параметрами. Каждый параметр и его значение лучше писать в разные строки.

OnDemand — Этот ключ говорит Launchd перезапустить процесс если он не запустился или упал. Так же устновив значение false говорит о том, что мы хотим чтобы процесс был запущен всегда.

Теперь обернем это все в стандартную запись присутсвующую во всех файлах подобного типа.

Сохраним. Теперь Launchctl — это программа интерфейс для Launchd.
С помощью нее мы сможем включать или выключать загрузку нашего кофигурационного файла.
Например следующая команда включит наш файл.
sudo launchctl load -w /Library/LaunchDaemons/com.php-fcgi.plist
А эта выключит.
sudo launchctl unload -w /Library/LaunchDaemons/com.php-fcgi.plist
И добавит ключ с параметром в наш файл.

Вобщем теперь у нас при загрузке должно запускаться 5 процессов php-cgi. Перезапускать их можно командой
sudo launchctl stop php
а так как у нас стоит OnDemand false, то это просто перезапустит процесс.

Да чуть не забыл. Если вы хотите добавить переменные окружения, то надо написать примерно так

А теперь бонусы
Для многих копаться в командной строке лень или сложно. Для них есть вариант полегче. Это бесплатная программа Lingon.

Так же с помощью этой программы вы можете открыть com.apple.syslogd
и вместо /usr/sbin/syslogd написать /usr/sbin/syslogd -c 3 -a
Параметр -с 3 скажет игнорировать менее важные сообщения. И syslogd будет записывать только важные сообщения. Если хотите 0 это самые важные. 8 наименее.
Параметр -а скажет syslogd архивировать записи. И очищать активную базу записей каждые 24 часа.
Все это сделает немного быстрее ваш мак.

PS.
Когда я разбирался с launchd я столкнулся с небольшой проблемой. При старте вызывалась программа spawn-php (да я знаю что это было глупо) и она вызывала php-cgi процессы. При тестировании все было хорошо. Но при загрузке ничего не происходило. Только с десятого раза получалось запустить процессы. Не знаю с чем это было связано, может это проблема именно в spawn-php, но она решилась способом, который я описал выше, т.е. вызовом напрямую процесса.

Источник

Автозапуск скриптов при загрузке macOS

Это руководство пригодится тем, кто хочет, чтобы скрипты автоматически запускались при загрузке macOS еще до входа пользователя в систему.

В данном руководстве рассматривается работа в терминальном эмуляторе iTerm2.

Заходим в систему под учетной записью с правами администратора и запускаем терминальный эмулятор.

Теперь создадим скрипт, который будет содержать необходимые для выполнения сценарии при загрузке macOS, с помощью команды:

sudo vim /Users/valdemar/Documents/Scripts/run-service.sh

Обратите внимание, в данном руководстве скрипт с названием «run-service.sh» создается в домашнем каталоге пользователя. Вы можете создать скрипт в любом удобном, для его постоянного хранения, месте.

Указываем пароль от учетной записи и нажимаем «Enter».

Нажимаем на кнопку «i», чтобы перейти в режим редактирования, затем добавляем необходимые для выполнения сценарии при загрузке macOS.

Теперь нажмите на кнопку «Esc», чтобы выйти из режима редактирования, а затем введите «:x» и нажмите на кнопку «Enter», чтобы сохранить изменения и выйти из редактора.

Разрешим исполнение файла «run-service.sh» с помощью команды:

sudo chmod +x /Users/valdemar/Documents/Scripts/run-service.sh

Теперь необходимо воспользоваться планировщиком задач Cron, чтобы запланировать выполнение скрипта после запуска операционной системы.

Открываем планировщик задач с помощью команды:

Нажимаем на кнопку «i», чтобы перейти в режим редактирования, затем добавляем строку с параметром «@reboot» и указываем полный путь до ранее созданного скрипта:

Теперь нажмите на кнопку «Esc», чтобы выйти из режима редактирования, а затем введите «:x» и нажмите на кнопку «Enter», чтобы сохранить изменения и выйти из редактора.

Теперь скрипт будет автоматически запускаться при загрузке macOS еще до входа пользователя в систему.

Источник

Как настроить автозапуск приложений при включении Mac

Сразу после загрузки любого компьютера, будь это Mac или устройство под управлением Windows 10, автоматически начинают подгружаться различные службы и программы из списка автозагрузки. Чтобы упростить работу с системой, вы можете, как добавить туда свои приложения, так и удалить лишние. Удаление ненужных программ из автозапуска ускорит загрузку системы, да и висящие в оперативной памяти лишние процессы не будут замедлять компьютер.

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

Итак, чтобы настроить автозагрузку в macOS, зайдите в главные настройки системы и выберите « Пользователи и группы ».

Список программ в автозагрузке находится в меню « Объекты входа ». Чтобы убрать оттуда лишнее приложение, просто выделите его и нажмите на знак « ». Если вы просто уберёте галочку, то это скроет приложение — оно не будет отображаться, но всё равно мертвым грузом зависнет в оперативной памяти вашего Mac.

Чтобы добавить нужную вам утилиту, кликните на знак «плюс» и выберите программу. При запуске macOS можно автоматически загружать браузер или, например, «Скайп». В список автозагрузки можно добавить абсолютно любое приложение.

Источник

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. Это ключевой момент в понимании того как происходит работа системы и его стоит рассмотреть подробнее:

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

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

Снова системная директория, но все конфиги исполняются от лица администратора (root) на уровне системы. Программа или сценарий будет исполнен вне зависимости от того, вошёл какой-либо пользователь в систему или нет. Это и есть нужный нам вариант.

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

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

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

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

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

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

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

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

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

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

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

Ключ «RunAtLoad» указывает системе, что правило нужно исполнить при загрузке ОС. Есть еще много всяких ключей и параметров, например для запуска приложения по расписанию или через определенные промежутки времени. Этой статьёй я даю лишь толчок для понимания дальнейшего изучения Launchd в OS X и не ставлю целью создать полноценное руководство.

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

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

Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.

Комментариев: 5

«launchctl: no plist was returned for: /Library/LaunchDaemons/smc 21.06.14.plist

nothing found to load»

Скорее всего дело в пробеле, который надо экранировать обратным слешем.

Доброго времени суток. Не могу понять как создать сам файл . plist. Не подскажите?

это обычный тестовый документ — создавать и править можно в любом текстовом редакторе. лично я предпочитаю Sublime Text

Хотелось бы реализовать нечто подобное для сценария создания RAM-диска при запуске ОС и перенести на него некоторые кеши. Не поможете решить эту задачу?

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Mac os автозагрузка программ
  • Mac os аварийная загрузка
  • Mac os zip пароль
  • Mac os zip with password
  • Mac os zip archiver