Автоматический запуск скрипта mac os

Выполнение произвольного скрипта при старте системы 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.

  1. Идем в /Library/StartupItems.
  2. Создаем там папку (в моем случае прописывания маршрутов, это будет addoute).
  3. Идем туда.
  4. Создаем там скрипт, который хотим выполнять. Он должен называться так же как и папка!
  5. Создаем файлик параметров StartupParameters.plist.
  6. Выставляем права на выполнение нашему скрипту.
  7. Перегружаем систему и убеждаемся, что все работает.

Вот собственно и все. Для того чтобы проверить, что все сделано правильно — совсем не обязательно перегружать комп. Можно попробовать запустить наш «сервис» ручками и убедиться что все отработало корректно.

Источник

Запуск скрипта при входе в систему 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 , если только вы не хотите интерактивности .

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

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

    Читайте также:  Восстановление всех системных файлов windows 10

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

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

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

    /Library/LaunchAgents

  • Войти (или запустить вручную через launchctl load [filename.plist] )
  • Более того 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 еще до входа пользователя в систему.

    Источник

    Читайте также:  Перезагрузка windows 10 после установки драйверов
    Оцените статью