Выполнение произвольного скрипта при старте системы Mac OS X
Автор: KSDaemon
Дата записи
Всем привет! У меня на работе давно есть потребность в статических маршрутах, отличных от маршрута по умолчанию. Но писать каждый раз в консоли sudo route add 10.1.1.1/24 192.168.24.222 после входа как-то напрягает, да и просто банально лень делать это каждый раз. В данном случае, прописывание маршрута — это частная задача. В общем случае это сводится к выполнению произвольного скрипта. Однако есть решение, пусть и не очень простое, но все-таки!
Для того, чтобы выполнить скрипт при старте системы Mac OS X, надо добавить еще один StartupItem. В системе есть 2 места, где они располагаются, это: /Library/StartupItems и /System/Library/StartupItems. Последнее лучше не трогать, потому что это вообще системная область и не надо туда лезть. Поэтому будем использовать /Library/StartupItems.
- Идем в /Library/StartupItems.
- Создаем там папку (в моем случае прописывания маршрутов, это будет addoute).
- Идем туда.
- Создаем там скрипт, который хотим выполнять. Он должен называться так же как и папка!
- Создаем файлик параметров StartupParameters.plist.
- Выставляем права на выполнение нашему скрипту.
- Перегружаем систему и убеждаемся, что все работает.
Вот собственно и все. Для того чтобы проверить, что все сделано правильно — совсем не обязательно перегружать комп. Можно попробовать запустить наш «сервис» ручками и убедиться что все отработало корректно.
Источник
Запуск скрипта при входе в систему mac [закрыто]
Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме переполнения стека.
Закрыто 7 лет назад .
Мне интересно, сможет ли кто-нибудь помочь мне с запуском файла .sh при входе в свою учетную запись на моем компьютере. Я использую Mac OS X 10.6.7.
У меня есть файл «Example.sh», который я хочу запустить при входе на компьютер. У меня нет проблем с его запуском, когда я уже вошел в систему, но я хочу, чтобы он запускался автоматически.
Люди говорят, чтобы добавить его в файл оболочки входа, но я не знаю, где это. Некоторая помощь, пожалуйста.
Следить за этим:
- Начало Automator.app
- Выбрать Application
- нажмите Show library на панели инструментов (если скрыто)
- добавить Run shell script (из Actions/Utilities )
- скопируйте и вставьте ваш скрипт в окно
- Попробуй это
сохранить где-нибудь (например, вы можете сделать Applications папку в вашем доме, вы получите your_name.app )
перейти к System Preferences -> Accounts -> Login items
РЕДАКТИРОВАТЬ:
Недавно я получил значок «Хороший ответ» для этого ответа. Хотя моё решение простое и работает, самый простой способ запуска любой программы или сценария оболочки во время входа в систему описан в ответе @ trisweb , если только вы не хотите интерактивности .
С помощью автоматического решения вы можете делать следующее:
Итак, запрос на запуск сценария или выход из приложения, запрос пароля, запуск других рабочих процессов автоматизатора во время входа в систему, условный запуск приложений во время входа в систему и так далее .
tl; dr: использовать встроенный в OSX модуль запуска и управления процессами launchd .
Для этого создайте launchctl демон. Вы будете иметь полный контроль над всеми аспектами сценария. Вы можете запустить один раз или остаться в живых как демон. В большинстве случаев это путь.
- Создайте .plist файл в соответствии с инструкциями в документации Apple Dev здесь или более подробно ниже.
- Установить в
/Library/LaunchAgents
Более того launchd , статья в Википедии довольно хороша и описывает систему и ее преимущества перед другими старыми системами.
Вот конкретный файл plist для запуска скрипта при входе в систему .
Обновлен 2017/09/25 для OSX El Capitan и новее (кредит Хосе Мессиасу-младшему ):
Замените после ключа программы нужной вам командой (обратите внимание, что любой сценарий, на который ссылается эта команда, должен быть исполняемым: chmod a+x /path/to/executable/script.sh это должно быть сделано для всех пользователей).
Запустить launchctl load
/Library/LaunchAgents/com.user.loginscript.plist и выйти / войти, чтобы проверить (или проверить напрямую, запустить launchctl start com.user.loginscript )
Хвост /var/log/system.log для сообщений об ошибках.
Ключевым моментом является то, что это запись запуска для конкретного пользователя, поэтому она будет выполняться при входе в систему для данного пользователя. Системные демоны запуска (помещенные в /Library/LaunchDaemons ) запускаются при загрузке.
Если вы хотите, чтобы сценарий запускался при входе в систему для всех пользователей, я полагаю, что LoginHook — ваш единственный вариант, и, вероятно, именно поэтому он существует.
Источник
Запускаем программы при запуске 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, но она решилась способом, который я описал выше, т.е. вызовом напрямую процесса.
Источник
Как я могу заставить скрипт запускаться каждый день на Mac OS X?
Cron? Запуск программ? ческий ??
Если так, то как?
10 ответов 10
Для справки, все 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, в котором говорилось, что если машина выключена, то вы потеряете все события запуска в течение этого времени, (ваш скрипт не запустится при запуске), (сон запускает скрипт при пробуждении)
Другой вариант — использовать « at » (проверьте страницу руководства с «man at»). Скрипт может перепланировать себя, например:
(используйте «+ 10 минут» вместо «завтра», чтобы запускать его каждые 10 минут; чтобы остановить планирование, просто выполните «at -l», чтобы получить список идентификаторов запланированных заданий, а затем «at -r id », чтобы удалить задание).
Возможно, вам придется сначала запустить соответствующий демон (atrun) с (см. Https://superuser.com/a/43680):
Преимущества: быстрое исправление, отсутствие доступа к sudo/root, простое создание сложных шаблонов расписаний. Недостаток: нестандартный метод планирования для OS X (который запускается)
Источник
Автозапуск скриптов при загрузке macOS
Это руководство пригодится тем, кто хочет, чтобы скрипты автоматически запускались при загрузке macOS еще до входа пользователя в систему.
В данном руководстве рассматривается подключение к серверу при помощи терминального эмулятора iTerm2, установленного на операционную систему macOS.
Заходим в систему под учетной записью с правами администратора и запускаем терминальный эмулятор.
Теперь создадим скрипт, который будет содержать необходимые для выполнения сценарии при загрузке macOS, с помощью команды:
Обратите внимание, в данном руководстве скрипт с названием “run-service.sh” создается в домашнем каталоге пользователя. Вы можете создать скрипт в любом удобном, для его постоянного хранения, месте.
Указываем пароль от учетной записи и нажимаем “Enter”.
Нажимаем на кнопку “i”, чтобы перейти в режим редактирования, затем добавляем необходимые для выполнения сценарии при загрузке macOS.
Теперь нажмите на кнопку “Esc”, чтобы выйти из режима редактирования, а затем введите “:x” и нажмите на кнопку “Enter”, чтобы сохранить изменения и выйти из редактора.
Разрешим исполнение файла “run-service.sh” с помощью команды:
Теперь необходимо воспользоваться планировщиком задач Cron, чтобы запланировать выполнение скрипта после запуска операционной системы.
Открываем планировщик задач с помощью команды:
Нажимаем на кнопку “i”, чтобы перейти в режим редактирования, затем добавляем строку с параметром “@reboot” и указываем полный путь до ранее созданного скрипта:
Теперь нажмите на кнопку “Esc”, чтобы выйти из режима редактирования, а затем введите “:x” и нажмите на кнопку “Enter”, чтобы сохранить изменения и выйти из редактора.
Теперь скрипт будет автоматически запускаться при загрузке macOS еще до входа пользователя в систему.
Источник