У меня есть демон 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
, чтобы загрузить его.