У мене є визначене демонове визначення
/Library/LaunchDaemons/homebrew.mxcl.docker-machine.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>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
<key>Label</key>
<string>homebrew.mxcl.docker-machine</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/docker-machine/bin/docker-machine</string>
<string>start</string>
<string>default</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>UserName</key>
<string>sysbh</string>
<key>WorkingDirectory</key>
<string>/Users/sysbh</string>
</dict>
</plist>
Під час завантаження це не працює. Але після входу в систему я можу змусити його працюватиsudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.docker-machine.plist
Будь-які поради, що я можу зробити, щоб з’ясувати, чому запущений пліст не запускає програму під час завантаження / запуску, але чи пізніше?
І припустимо (що є виразною можливістю), що цей демон залежить від першого запущеного демона, який був запущений першим (і щоб зробити його складнішим: цей демон запускається лише один раз, щоб встановити кексти), чи існує спосіб вирішення цієї проблеми?
Ви впевнені, що він не запускається, чи може просто не вийти? Якщо це не вдається, KeepAlive використає 10-секундне відключення перед повторним запуском. Ще кілька ідей:
—
pmdj
sysbh
ваш користувач? Якщо так, чи зашифрований ваш домашній каталог? Це зупинить його від роботи , поки ви не ввійшли в систему . Крім того , якщо це ваш користувач, не було б краще реалізувати це як Launch агента ? (поставити запущений список ~/Library/LaunchAgents/
)
Нарешті, ви згадуєте про кекстну залежність; ви можете змусити запускати демонів і агентів запускати, коли вузол IOKit збігається. Однак бінарний агент повинен відповісти на це повідомлення. Отже, це буде працювати лише в тому випадку, якщо ваш кекс опублікує вузол в IORegistry і якщо докер-машина може обробляти створений IOKit, що відповідає XPC події.
—
pmdj
Ні, він не отримав інвалідів і мені не потрібен прапор -w, щоб він працював з командного рядка. Диск є FileVaulted, але в момент завантаження демонів він був уже розшифрований (необхідний для завантаження). Зрозуміло, що команда виходить з ладу під час завантаження, але не пізніше, коли завантажується вручну. Це не повинно бути LaunchAgent, оскільки він повинен запускатися перед тим, як хтось увійде в систему, я просто не хочу, щоб цей процес запускався з привілеями root з міркувань безпеки, тому я використовую іншого користувача. Як я можу дізнатися, чи кекс публікує цей вузол?
—
gctwnl
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.docker-machine.plist
(зверніть увагу-w
).