O que há de errado com a minha configuração do launchctl?

15

Estou tentando executar automaticamente o SickBeard no login

python /Applications/Sick-Beard/Sickbeard.py

<?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>com.sickbeard.sickbeard</string>
  <key>ProgramArguments</key>
  <array>
       <string>/usr/bin/python</string>
       <string>/Applications/Sick-Beard/SickBeard.py</string>
       <string>-q</string>
       <string>-d</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Quando corro, launchctl com.sickbeard.sickbeard.plistele me dá a mensagem:

launchctl load com.sickbeard.sickbeard.plist launchctl: nenhum plist foi retornado para: com.sickbeard.sickbeard.plist launchctl: nenhum plist foi retornado para: com.sickbeard.sickbeard.plist nada encontrado para carregar

João Costa
fonte
Suponho que você quis dizer "launchctl load com.sickbeard.sickbeard.plist" na sua linha de comando? Caso contrário você deseja obter um erro completamente diferente ;-)
binarybob

Respostas:

37

Estou assumindo que os caminhos para o script python e seus parâmetros são válidos; caso contrário, você provavelmente verá erros no console.

A última vez que vi esse erro foi porque havia caracteres espúrios na lista, por exemplo, espaços extras, causando erros de sintaxe e, portanto, impedindo o carregamento. Se você executar o plutil -lintseu plist, isso verificará a sintaxe para você e também informará com facilidade a linha na qual o erro ocorreu.

plutil -lint com.sickbeard.sickbeard.plist

Se isso não ajudar, o (OSX) Como iniciar o SickBeard no logon ou inicialize no thread OSX nos fóruns do sickbeard possui um aspecto ligeiramente diferente do seu (o sickbeard está sendo executado /usr/localem oposição a /Applications- para que possa ser uma coisa de permissões) e também algumas pessoas aparentemente com o mesmo problema que você

binarybob
fonte
2
Obrigado pela ajuda. Parece que copiar e colar trouxe um personagem extra que estava oculto. Redigitei todo o XML com nano e funcionou muito bem.
João Costa
2
Obrigado, nunca soube plutil -lintantes. Muito conveniente!
robmathers
Acabei de encontrar esta postagem, mas verificar a saída do console também ajuda bastante na depuração.
Wing Tang Wong
2

Como descobri da maneira mais difícil, você deve executar o comando usando sudoe passando o caminho completo do .plistarquivo da seguinte maneira (no seu caso):

sudo launchctl load /Library/LaunchDaemons/com.sickbeard.sickbeard.plist

O caminho pode ser diferente para você, mas você deve localizar o arquivo para descobrir sua localização e passá-lo como citei no launchctlcomando.

Johnny
fonte
2

nothing found to loadÀs vezes, a mensagem significa que a configuração é substituída por outra configuração. Você força o carregamento usando a opção "-w" ao usar launchctl load or unload.

Se você precisar forçar a carga ou descarga de um arquivo plist, significa que você possui uma configuração que substitui a lista. Essa substituição é criada quando você usa o "-w", caso contrário, nenhuma substituição será adicionada ao arquivo de substituições. Para evitar esse caso, edite o arquivo abaixo, procure o rótulo do trabalho que deseja remover a substituição e exclua as linhas necessárias:

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

Por exemplo, exclua esta linha

<key>com.mydomain.myjob</key>
<dict>
        <key>Disabled</key>
        <true/>
</dict>

então você pode usar: launchctl load or unload /Library/LaunchDaemons/com.mydomain.myjob.plistsem a necessidade de "-w" ou "-F", você não deve ter a mensagemnothing found to load

Sylvain Rayé
fonte
1

Você pode adicionar o sinalizador -F para forçar o launchctlcarregamento do .plist. Além disso, verifique se o .plist está nos caminhoslaunchctl pesquisas de . Se o seu .plist estiver em outro lugar, você também pode adicionar o sinalizador -D e especificar o domínio. Na página de manual:

-D domínio
Procure por arquivos plist (5) que terminem em * .plist no domínio fornecido. Os domínios válidos incluem "sistema", "local", "rede" e "todos". Ao fornecer um tipo de sessão, um domínio adicional está disponível para uso chamado "usuário". Por exemplo, sem um tipo de sessão fornecido, "-D system" seria carregado dos arquivos da lista de propriedades de / System / Library / LaunchDaemons. Com um tipo de sessão passado, ele seria carregado em / System / Library / LaunchAgents.

Verifique todas as informações contidas na página de manual - você pode realmente destruir as coisas se a sua chamada não estiver configurada corretamente.

soxman
fonte