~ / Библиотека / LaunchAgents plist запускается вручную, но не автоматически - PullRequest
5 голосов
/ 20 декабря 2010

Я начинаю работать с launchd и хочу настроить файл plist таким образом, чтобы всякий раз, когда я вставляю SD-карту в свой мини-сервер Mac (с сервером Snow Leopard), я хотел запускать сценарий оболочки (который должен копировать все файлы jpg, переименуйте их и т. д.).

Итак, я создал файл plist в ~ / Library / LaunchAgents (см. Его содержимое ниже - он должен искать изменения в / Volumes) и создал сценарий оболочки, который говорит "beep" - позже это будет делать что-то более полезное.

Файл plist регистрируется с помощью launchctl, и когда я его запускаю (launchctl start com.peters.runwhenSDmount), компьютер издает звуковой сигнал всякий раз, когда карта памяти подключена, и остается тихим, когда карты памяти нет. Таким образом, очевидно, что plist вызывает сценарий оболочки, который впоследствии проверяет наличие конкретной SD-карты. Я предполагаю, что это также доказывает, что нет проблем с разрешениями для SD-карты.

Но, похоже, он не запускается сам по себе ??? Есть идеи почему ??


файл plist: ~ / Library / LaunchAgents / com.peters.runwhenSDmount.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<dict>
    <key>Label</key>
    <string>com.peters.runwhenSDmount</string>
    <key>LowPriorityIO</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
    <string>/Users/peter/Library/Scripts/runwhenSDmount</string>
    </array>
    <key>ThrottleInterval</key>
    <integer>10</integer>
    <key>WatchPaths</key>
    <array>
    <string>/Volumes</string>
    </array>
</dict>
</plist>

сценарий оболочки: ~ / Library / Scripts / runwhenSDmount

#!/bin/bash
if [ -d "/Volumes/NIKON D40X" ]; then
    say beep
fi

Ответы [ 3 ]

7 голосов
/ 14 мая 2012

У меня просто была похожая проблема с автоматическим запуском служб в ~ / Library / LaunchAgents , но в моем случае ни одна из * .plist определенных служб не была запущена.

Проблема, очевидно, была связана с каталогом ~ / Library / LaunchAgents , а не с самими файлами plist. Решением было сбросить права доступа к файлу.

chmod 700 ~/Library/LaunchAgents.

Обновление для доморощенных пользователей: (2015-02-23)

Вчера я только что нашел LaunchRocket , который является Mac PreferencePane для управления службами с помощью launchd. Он поддерживает homebrew и добавляет приятный интерфейс для управления запущенными сервисами homebrew.

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

7 голосов
/ 31 июля 2011

После создания нового plist в папке ~ / Library / LaunchAgents вы должны сообщить об этом запущенному приложению.Два основных способа сделать это:

  1. Выйти, а затем войти в систему. - Каждый раз, когда вы входите в систему, launchd будет сканировать содержимое вашей папки ~ / Library / LaunchAgents и добавлять любыеПлист это там находит.

  2. Загрузить список из командной строки терминала с помощью "launchctl".Синтаксис команды:

    launchctl load {Path-to-plist}
    

Команду launchctl также можно использовать, чтобы остановить launchd от использования plist.Для этого используйте:

launchctl unload {Path-to-plist}

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

2 голосов
/ 11 марта 2013

Два инструмента, которые помогают в создании и управлении запускаемыми элементами:

  1. LaunchControl - " LaunchControl - это полнофункциональный внешний интерфейс launchd (8), позволяющийВы можете создавать, управлять и отлаживать системные и пользовательские сервисы на вашем Mac."
  2. Lingon -" Простая в использовании, но мощная утилита, которая автоматически запускает вещиВаш Mac"

Как примечание: Бретт Терпстра (который делает кучу замечательных Mac, работает над такими вещами, как nvAlt ) недавно прокомментировал в своем посте" Удаленный запуск задач с помощью notifyutil и launchd", которые он использовал для Lingon, но использовал LaunchControl совсем недавно.Любой из них стоит изучить.

...