Вопрос или проблема
Я пытаюсь загрузить свое демона-приложение с помощью этой команды
launchctl load /Library/LaunchDaemons/myPlistFileName
Это работает нормально, но только когда мой пользователь вошел в систему.
Как мне загрузить мое демона-приложение, которое останется загруженным без какого-либо пользователя, вошедшего в систему (как службы Windows)??
Команда
sudo launchctl load /Library/LaunchDaemons/myPlistFileName
дает мне ошибку -> ничего не найдено для загрузки
Каков правильный способ сделать это?
Чтобы загрузить задачу для всех, вам нужно запустить launchctl
с правами root. Если задача уже загружена под вашей учетной записью, она не загрузится с правами root.
Сначала попробуйте выполнить launchctl unload /Library/LaunchDaemons/myPlistFileName
, прежде чем запустить sudo launchctl load -w /Library/LaunchDaemons/myPlistFileName
. Обратите внимание на вывод в system.log
(вы можете просмотреть его с помощью Console.app, если хотите), который появляется при загрузке демона.
Я попробовал все вышеперечисленное и все еще не смог загрузить свою задачу.
Если вы получаете ошибку Load failed: 5: Input/output error
, может помочь сменить владельца и группу .plist на root
и wheel
соответственно.
После этого sudo launchctl load -w /Library/LaunchDaemons/myPlistFileName
сработало нормально для меня.
Если вы не можете выполнить
sudo launchctl load /Library/LaunchDaemons/myPlistFileName
попробуйте сначала переключиться на пользователя root:
sudo su
Система попросит вас ввести пароль – введите пароль вашего стандартного пользователя, и теперь вы будете использовать терминал под учетной записью root.
Затем запустите
launchctl load /Library/LaunchDaemons/myPlistFileName
команду.
Я все еще испытывал проблемы после этого. Решение для меня было:
sudo launchctl load -F /Library/LaunchDaemons/myPlistFileName
После этого я смог загружать и выгружать его столько, сколько хотел.
Ответ или решение
Чтобы запустить системный демон на Mac OS X, который будет работать независимо от пользователя, вам необходимо следовать определенным шагам. Ниже приведено подробное руководство, которое поможет вам правильно настроить и запустить ваш демон.
1. Подготовка .plist файла
Прежде всего, убедитесь, что ваш файл .plist для демона корректно настроен. Файл должен находиться в каталоге /Library/LaunchDaemons
и иметь правильный формат. Пример структуры .plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.yourdomain.yourdaemon</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/your/daemon/executable</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/var/log/yourdaemon.log</string>
<key>StandardErrorPath</key>
<string>/var/log/yourdaemon.log</string>
</dict>
</plist>
2. Установка прав доступа
Далее необходимо убедиться, что права доступа к файлу .plist установлены корректно. Для работы демонов требуется, чтобы владелец файла был root
, а группа — wheel
. Задайте нужные права следующим образом:
sudo chown root:wheel /Library/LaunchDaemons/myPlistFileName.plist
sudo chmod 644 /Library/LaunchDaemons/myPlistFileName.plist
3. Загрузка демона
Если ваш демон уже был загружен под учетной записью пользователя, его необходимо сначала выгрузить. Для этого выполните:
sudo launchctl unload /Library/LaunchDaemons/myPlistFileName.plist
Теперь вы можете загрузить демона как системную службу. Используйте следующую команду:
sudo launchctl load -w /Library/LaunchDaemons/myPlistFileName.plist
Флаг -w
гарантирует, что демон будет загружен автоматически при следующей загрузке системы.
4. Проверка статуса
Чтобы убедиться, что демон загружен и работает, выполните следующую команду:
sudo launchctl list | grep com.yourdomain.yourdaemon
Если его имя присутствует в списке, значит, он успешно запущен.
5. Устранение ошибок
Если вы столкнулись с ошибкой "Load failed: 5: Input/output error" или аналогичной, это может указывать на проблемы с правами доступа к файлу .plist или на неправильный формат самого файла. Убедитесь, что файл соответствует требованиям и что права доступа настроены корректно. Кроме этого, для проверки ошибок в работе демонов можно использовать логи:
tail -f /var/log/system.log
6. Альтернативный способ
Если все вышеперечисленные шаги не помогают, вы можете переключиться на root-пользователя:
sudo su -
После этого выполните команду загрузки:
launchctl load -w /Library/LaunchDaemons/myPlistFileName.plist
Это иногда помогает избежать проблем с правами доступа при загрузке.
Заключение
Следуя этим шагам, вы сможете успешно загрузить ваш системный демон на Mac OS X, чтобы он работал независимо от состояния пользователя. Если после выполнения всех указаний проблема всё ещё сохраняется, возможно, стоит проверить само приложение на наличие ошибок или протестировать его в отладочном режиме.