Mac Leopard Launchd Daemon создается с работой привычки Lingon

Прежде всего: Я абсолютно плохо знаком с 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

1
задан 18.04.2011, 18:12

1 ответ

Launchd ожидает программы, которые он запускает не к daemonize сами; если они делают, launchd обнаруживает его как выход программы и очищает все подпроцессы (т.е. уничтожает теперь-daemonized программа). В зависимости от запуска демона и/или условий проверки активности, это могло бы затем повторно запустить его и сделать все это много раз. В этом случае я думаю все, что необходимо сделать, добавляют <string>--no-daemon</string> к массиву ProgramArguments.

Еще несколько (менее критических) изменений я сделал бы: во-первых, проиграйте sudo - это не нужно (launchd, выполняет демонов как корень, если не сказали, чтобы сделать иначе), и если бы это было необходимо, то это не работало бы (это должно запросить пароль, и нет никого доступного в контексте демона). Во-вторых, WorkingDirectory ключ и -d аргумент, кажется, делает точно то же самое; нет никакого смысла в использовании обоих. Наконец, Вы могли бы хотеть добавить <key>KeepAlive</key><true/>, так, чтобы, если сервис действительно отказывает, он был повторно запущен автоматически.

1
ответ дан 12.12.2019, 10:34

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>

Тот сосунок никогда не собирается запускаться.

2
ответ дан 12.12.2019, 10:34

Теги

Похожие вопросы