Прежде всего: Я абсолютно плохо знаком с Mac, таким образом, проблема могла бы быть действительно действительно основной.
Я пытался настроить Демона Launchd для выполнения при запуске для выполнения Сервиса через Моно. Платформы. Я использовал Lingon для создания .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.netviewer.WorkerContainer</string>
<key>ProgramArguments</key>
<array>
<string>sudo</string>
<string>/Library/Frameworks/Mono.framework/Versions/Current/bin/mono-service2</string>
<string>-d:/Users/nvadmin/MacCustomizationWorker</string>
<string>/Users/nvadmin/MacCustomizationWorker/Worker.Container.exe</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceDescription</key>
<string>Worker Container</string>
<key>WorkingDirectory</key>
<string>/Users/nvadmin/MacCustomizationWorker</string>
</dict>
</plist>
Команда для запуска сервиса действительно хорошо работает, когда выполнено вручную
Это однако не запускается автоматически на запуске. Какая-либо справка? Я действительно застреваю, так как это - первый раз, когда я использую Mac.
Joe
Launchd ожидает программы, которые он запускает не к daemonize сами; если они делают, launchd обнаруживает его как выход программы и очищает все подпроцессы (т.е. уничтожает теперь-daemonized программа). В зависимости от запуска демона и/или условий проверки активности, это могло бы затем повторно запустить его и сделать все это много раз. В этом случае я думаю все, что необходимо сделать, добавляют <string>--no-daemon</string>
к массиву ProgramArguments.
Еще несколько (менее критических) изменений я сделал бы: во-первых, проиграйте sudo
- это не нужно (launchd, выполняет демонов как корень, если не сказали, чтобы сделать иначе), и если бы это было необходимо, то это не работало бы (это должно запросить пароль, и нет никого доступного в контексте демона). Во-вторых, WorkingDirectory
ключ и -d
аргумент, кажется, делает точно то же самое; нет никакого смысла в использовании обоих. Наконец, Вы могли бы хотеть добавить <key>KeepAlive</key><true/>
, так, чтобы, если сервис действительно отказывает, он был повторно запущен автоматически.
Launchd причудлив о полномочиях. Если это не будет принадлежать root:wheel с набором полномочий к 600, то это ничего, скорее всего, не сделает с этим plist при запуске, независимо от того, как Вы загружаете его, или что это говорит внутри.. Можно заметить запись в журнале о "Сомнительных Полномочиях" в таком случае. Если это - проблема...
sudo chown root:wheel /Library/LaunchDaemons/org.saveusfromlaunchctl.sucks.plist
sudo chmod 600 /Library/LaunchDaemons/org.saveusfromlaunchctl.sucks.plist
sudo launchctl unload -w /Library/LaunchDaemons/org.saveusfromlaunchctl.sucks.plist
sudo launchctl load -w /Library/LaunchDaemons/org.saveusfromlaunchctl.sucks.plist
Еще небольшой разглашенный факт о LaunchDameons является теневым шведским столом launchd предпочтений в святилище
/var/db/launchd.db/com.apple.launchd/overrides.plist
если у Вас есть запись в каком-либо из тех overrides.plist's с
<key>org.saveusfromlaunchctl.sucks</key>
<dict>
<key>Disabled</key>
<true/>
</dict>
Тот сосунок никогда не собирается запускаться.