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

Обновлено: 05.07.2024

Для справки, все 3 варианта будут работать. Однако опция iCal имеет больше ограничений, чем другие.

(Есть графические интерфейсы для редактирования cron и launchd, как упоминалось в других ответах)

Cron - самый прямой и хорошо известный, и есть много доступных учебников. Coles Notes должен добавить последнюю строку снизу к вашему crontab (либо отредактировав /etc/crontab либо используя crontab в командной строке):

В Mac OS X cron фактически был заменен launchd но launchd обратно совместим с cron означает, что вы все еще можете использовать cron но он фактически launchd выполняя всю работу.

Если вы хотите использовать launchd вы также можете проверить другие вопросы здесь, в Super User: (например. Как запустить команду launchd от имени пользователя root?) где вы хотите сохранить файл конфигурации (plist-файл), так как время его запуска зависит от того, в каком каталоге он хранится и как он загружается (например, использовали ли вы sudo или нет) - аналогично cron.

Ниже приведен пример запуска ежедневного запуска запусков (убедитесь, что файл и метка совпадают - минус список для метки). Этот сценарий запускается ежедневно в 3 минуты после полуночи:

Стоит также отметить, что запущенные задачи, если они были запланированы на то время, когда компьютер спит или выключен, будут запускаться, когда компьютер снова станет доступным (его включение или пробуждение) - хотя только один раз, независимо от того, сколько дней он может иметь было. Изменить: Я только что был в документе Apple, в котором говорилось, что если машина выключена, то вы потеряете все события запуска в течение этого времени, (ваш скрипт не запустится при запуске), (сон запускает скрипт при пробуждении)

(используйте «+ 10 минут» вместо "завтра", чтобы запускать его каждые 10 минут; чтобы остановить планирование, просто выполните «at -l», чтобы получить список идентификаторов запланированных заданий, а затем «at -r id », чтобы удалить задание).

Преимущества: быстрое исправление, отсутствие доступа к sudo/root, простое создание сложных шаблонов расписаний. Недостаток: нестандартный метод планирования для OS X (который запускается)

Начнем с истории. Жили были десяток программ для запуска процессов или программ. И тысячи скриптов к ним. 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

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

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

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

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

В данном руководстве рассматривается подключение к серверу при помощи терминального эмулятора iTerm2, установленного на операционную систему macOS.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Launchd

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

Как вы уже догадались, директории 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 и не ставлю целью создать полноценное руководство.

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

Яндекс.Дзен и узнавайте первыми о новых материалах, опубликованных на сайте.

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

macOS Catalina. Файл невозможно открыть, так как Apple не может проверить его на наличие вредоносного ПО. Проверка компьютера Mac на наличие проблем с оборудованием. Экраны mini-LED могут прийти на смену OLED уже в следующем году Это не шутка. Списание денег и скрытая отправка смс на номер +447786205094 на iPhone. Мечта поэта - MacBook Pro 13 с дисплеем Retina Apple – это когда одна клавиатура по цене целого ноутбука.

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

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

nothing found to load"

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

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

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

Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме переполнения стека.

Закрыто 7 лет назад .

Мне интересно, сможет ли кто-нибудь помочь мне с запуском файла .sh при входе в свою учетную запись на моем компьютере. Я использую Mac OS X 10.6.7.

У меня есть файл «Example.sh», который я хочу запустить при входе на компьютер. У меня нет проблем с его запуском, когда я уже вошел в систему, но я хочу, чтобы он запускался автоматически.

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

Это не по теме . Мне нужно было запустить мой демон Emacs;) Кстати, лучший ответ - ИМХО приложение Lingon X. Мне все равно, если это не по теме. Это лучший ответ, который я нашел в Интернете, и он заслуживает уважения. Я игнорировал это для других в первый раз, когда искал решение, и это было большой ошибкой!

Следить за этим:

  • Начало Automator.app
  • Выбрать Application
  • нажмите Show library на панели инструментов (если скрыто)
  • добавить Run shell script (из Actions/Utilities )
  • скопируйте и вставьте ваш скрипт в окно
  • Попробуй это

сохранить где-нибудь (например, вы можете сделать Applications папку в вашем доме, вы получите your_name.app )

перейти к System Preferences -> Accounts -> Login items

РЕДАКТИРОВАТЬ:

Недавно я получил значок «Хороший ответ» для этого ответа. Хотя моё решение простое и работает, самый простой способ запуска любой программы или сценария оболочки во время входа в систему описан в ответе @ trisweb , если только вы не хотите интерактивности .

приложение для входа в скриншот

С помощью автоматического решения вы можете делать следующее:

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

@GregMiernicki LOL, доброе утро . ;) Почти год назад добавили РЕДАКТИРОВАТЬ к моему ответу, где это тоже сказано. Но это немного проще для обычных пользователей, потому что создание файлов XML (plist) не очень удобно для многих пользователей. В любом случае - спасибо за комментарий. ;) @GregMiernicki и не забывайте, что с помощью решения Automator вы можете создавать интерактивные сценарии входа в систему - например, сценарий, который попросит вас ввести некоторые данные (например, дополнительный пароль или что-то подобное). Мир не только черный или белый - по крайней мере, это как зебра . :) :) @Cupidvogel Запуск демона во время входа в систему - это именно то, что нужно для решения launchd - см. Ответ trisweb. Если вы можете управлять демоном python, вы наверняка сможете управлять конфигурационным файлом plist, в котором вы сможете управлять всеми аспектами перезапусков и т. Д. Слава за указание на другой ответ, как самый чистый. Это должно получить хороший значок гражданства :). Удивительный ответ. Выполните экспорт PATH = / usr / local / bin: $ PATH в начале скрипта, если вы хотите запускать такие команды, как «глобальное обновление composer» при запуске системы.

tl; dr: использовать встроенный в OSX модуль запуска и управления процессами launchd .

Для этого создайте launchctl демон. Вы будете иметь полный контроль над всеми аспектами сценария. Вы можете запустить один раз или остаться в живых как демон. В большинстве случаев это путь.

  1. Создайте .plist файл в соответствии с инструкциями в документации Apple Dev здесь или более подробно ниже.
  2. Установить в

Более того launchd , статья в Википедии довольно хороша и описывает систему и ее преимущества перед другими старыми системами.

Вот конкретный файл plist для запуска скрипта при входе в систему .

Обновлен 2017/09/25 для OSX El Capitan и новее (кредит Хосе Мессиасу-младшему ):

Замените <string> после ключа программы нужной вам командой (обратите внимание, что любой сценарий, на который ссылается эта команда, должен быть исполняемым: chmod a+x /path/to/executable/script.sh это должно быть сделано для всех пользователей).

Запустить launchctl load

Ключевым моментом является то, что это запись запуска для конкретного пользователя, поэтому она будет выполняться при входе в систему для данного пользователя. Системные демоны запуска (помещенные в /Library/LaunchDaemons ) запускаются при загрузке.

Если вы хотите, чтобы сценарий запускался при входе в систему для всех пользователей, я полагаю, что LoginHook - ваш единственный вариант, и, вероятно, именно поэтому он существует.

Читайте также: