У меня есть демон launchd, ~/Library/LaunchAgents
который хорошо работал в Mavericks. Но это не начнется в публичной бета-версии Yosemite. Демон plist выглядит так (мое имя пользователя darksair
с UID 501)
<?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 >
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>KeepAlive</key>
<false/>
<key>StartInterval</key>
<integer>300</integer>
<key>LaunchOnlyOnce</key>
<false/>
<key>UserName</key>
<string>darksair</string>
<key>ProcessType</key>
<string>Standard</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
В основном это должно выполняться ~/bin/retrmail.py
каждые 5 минут.
Я заметил, что в Yosemite launchd обновлен до 2.0, а launchctl имеет новые команды. Я пытался
sudo launchctl kickstart user/501/org.darksair.retrmail
и сказал
Could not find service "org.darksair.retrmail" in domain for uid: 501
Я тоже пробовал старую школу
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
и сказал
/Users/darksair/Library/LaunchAgents/retrmail.plist: Path had bad ownership/permissions
Файл принадлежит мне и группе сотрудников. Я пробовал оба разрешения 644 и 600 с той же ошибкой.
Так кто-нибудь знает, как правильно запустить демон launchd в Yosemite?
ОБНОВЛЕНИЕ: похоже, мой файл агента запуска должен принадлежать root:wheel
. После того, как я попробовал, я попробовал
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
и это не выдало никакой ошибки. И я думаю, что мой Деймон работает правильно. Я оставлю этот вопрос открытым, потому что я помню, что в файле launchd четко указано, что файл агента запуска может принадлежать пользователю, работающему с демоном.
ОБНОВЛЕНИЕ 2: Нет, это не работает должным образом. Он запускался только один раз, но не снова, как если бы он был выгружен.
ОБНОВЛЕНИЕ 3: Я обновился до общедоступной бета-версии 3 Yosemite и изменил свой агент на этот
<?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 >
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>UserName</key>
<string>darksair</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Я перезагрузил этот агент, и я думаю, что теперь он работает правильно. Я все еще оставляю этот вопрос открытым, потому что я не знаю, что случилось с моим предыдущим списком.
В заключение я обнаружил, что мне нужно сменить владельца plist root:wheel
, чтобы загрузить его.
источник
Ответы:
От
man launchctl
Исправить это
источник
chmod 644
?Как ни странно, использование
sudo
было вашей проблемой. Используяsudo
, вы больше не были собой, поэтому вы не были владельцем своего собственного файла. удалятьsudo
, повторите команду и она должна загрузиться просто отлично. Извините за философский подход ко всему этому.источник
Нашел решение.
Правильная команда в этом случае
И разгрузить,
Не знаю, зачем
launchctl load
нужен root, но загрузка / выгрузка все равно не рекомендуется.источник
chmod
&chown
?С этим тоже столкнулся, пытаясь использовать пользователя, не принадлежащего root .plist (как это должно уметь)
Я был удаленно подключен к этой машине, пока я НЕ вошел в систему с консоли (без головы), что казалось моей проблемой - по крайней мере, для служб, управляемых пользователями, необходимо, чтобы пользователь вошел в систему на главном экране (в итоге я сделал вход через удаленное управление, так как это безголовый компьютер)
ИМО, если вы хотите, чтобы это работало, даже если вы не были лично для входа в систему, ваши варианты:
Сделайте вашу учетную запись автоматически (обратите внимание на безопасность, также без тега UserName, как указано в одном из ответов)
Сделайте файлы root-владельцами, как указано в различных предложениях (верните пользователю действительное обратно, используя UserName, как у вас уже есть)
источник
Вот глупая идея.
У меня была такая же ошибка, даже после того, как я обновился до Yosemite. Я ошибочно предположил, что это означало плохое владение / права доступа к файлу .plist, когда на самом деле по какой-то причине бинарный файл, на который я ссылался в plist (в моем случае cassandra), потерял свой исполняемый бит.
chmod + x'ing это исправило это.
Вероятно, не ваша проблема, но, возможно, стоит попробовать :)
источник
Удалить
UserName
ключ и строку.Проблема в том, что
UserName
ключ можно использовать только в том случае, если процесс запущен пользователем root. Он может быть запущен как root, только если plist принадлежит root. По сути, процесс запускается пользователем root и затем назначается указанному пользователю. Если вы хотите, чтобы этот процесс выполнялся как вы сами, поместите plist в папку ~ / Library / LaunchAgents и удалите ключ UserName.источник
Вы пытались вручную перезагрузить агент, у которого были разрешения пользователя? Я не совсем понимаю, почему все это требуется, но я считаю, что вам нужно присоединиться к домену вашего пользователя (к которому, похоже, вы не привязаны, когда запускаете от имени пользователя root). Использование этих функций для повторного подключения работало для меня.
Вы бы использовали это следующим образом:
Bsexec возвращает вас в ваш домен и позволяет добавить задачу в качестве агента запуска пользователя.
источник