O Daemon do Mac Leopard Launchd criado com o Lingon não funciona

1

Primeiro: sou absolutamente novo no Mac, então o problema pode ser muito básico.

Eu tenho tentado configurar um Daemon do Launchd para ser executado na inicialização para executar um Serviço por meio do Mono.Frameworks. Eu usei o Lingon para criar o arquivo .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>

O comando para iniciar o serviço funciona bem quando executado manualmente

No entanto, não é iniciado automaticamente na inicialização. Qualquer ajuda? Estou realmente preso, pois é a primeira vez que uso um Mac.

Joe

    
por Joe 18.04.2011 / 17:12

2 respostas

2

O Launchd é esquisito sobre permissões. Se não for possuído por root: wheel, com permissões definidas para 600 , provavelmente não fará nada com esse plist na inicialização, independentemente de como você o carrega ou o que ele diz dentro de você. pode notar uma entrada de log sobre "Permissões duvidosas" em tal caso. Se este é o problema ...

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

Outro pequeno fato divulgado sobre o LaunchDameons é a obscura miscelânea de preferências de lançamento no santuário de

 /var/db/launchd.db/com.apple.launchd/overrides.plist

se você tiver uma entrada em qualquer um desses overrides.plist com

<key>org.saveusfromlaunchctl.sucks</key>
    <dict>
        <key>Disabled</key>
        <true/>
    </dict>

Esse otário não é nunca lançado.

    
por 03.05.2011 / 00:29
1

O Launchd espera que os programas iniciem não para que eles próprios se daemonizem; se o fizerem, o launchd o detectará enquanto o programa está sendo encerrado e limpará todos os subprocessos (isto é, mata o programa now-daemonized). Dependendo das condições de início e / ou manutenção de atividade do daemon, ele pode então relançá-lo e fazer a coisa toda vez após vez. Nesse caso, acho que tudo que você precisa fazer é adicionar <string>--no-daemon</string> à matriz ProgramArguments.

Mais algumas mudanças (menos críticas): primeiro, perder o sudo - não é necessário (o launchd executa daemons como root, a menos que seja dito para fazer o contrário) e, se necessário, não trabalho (ele precisa solicitar uma senha e não há ninguém disponível no contexto do daemon). Segundo, o argumento WorkingDirectory e -d parecem fazer exatamente a mesma coisa; Não faz sentido usar ambos. Por fim, talvez você queira adicionar <key>KeepAlive</key><true/> , para que, se o serviço falhar, ele seja reiniciado automaticamente.

    
por 19.04.2011 / 02:16

Tags