¿Qué hay de malo con mi configuración de launchctl?

15

Estoy tratando de ejecutar automáticamente SickBeard al iniciar sesión

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>

Cuando corro launchctl com.sickbeard.sickbeard.plistme da el mensaje:

launchctl load com.sickbeard.sickbeard.plist launchctl: no se devolvió ninguna lista para: com.sickbeard.sickbeard.plist launchctl: no se devolvió ninguna lista para: com.sickbeard.sickbeard.plist no se encontró nada que cargar

Joao Costa
fuente
¿Supongo que quiso decir "launchctl load com.sickbeard.sickbeard.plist" en su línea de comando? De lo contrario, obtendría un error completamente diferente ;-)
binarybob

Respuestas:

37

Supongo que las rutas al script de Python y sus parámetros son válidos; de lo contrario, lo más probable es que veas errores en la consola.

La última vez que vi ese error fue porque había caracteres espurios en la lista, por ejemplo, espacios adicionales, que causaban errores de sintaxis y, por lo tanto, no se cargaban. Si ejecuta plutil -lintsu plist, esto verificará la sintaxis por usted y también informará cómodamente la línea en la que ocurrió el error.

plutil -lint com.sickbeard.sickbeard.plist

Si eso no ayuda, el (OSX) Cómo iniciar SickBeard al iniciar sesión o iniciar en el hilo de OSX en los foros de sickbeard tiene una lista ligeramente diferente a la suya (sickbeard se ejecuta en /usr/locallugar de /Applications, por lo que podría ser una cuestión de permisos) y También algunas personas con aparentemente el mismo problema que tú

binarybob
fuente
2
Gracias por tu ayuda. Parece que copiar y pegar trajo un personaje extra que estaba oculto. Reescribí todo el XML con nano y funcionó bien.
Joao Costa
2
Gracias, nunca supe de plutil -lintantes. ¡Muy útil!
Robmathers
Acabo de encontrar esta publicación, pero verificar la salida de la consola ayuda mucho con la depuración también.
Wing Tang Wong
2

Como descubrí por el camino difícil, debe ejecutar el comando usando sudoy pasando la ruta completa del .plistarchivo de la siguiente manera (en su caso):

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

La ruta puede ser diferente para usted, pero debe ubicar el archivo para averiguar su ubicación y pasarlo como cité al launchctlcomando.

Johnny
fuente
2

El mensaje nothing found to loadsignifica a veces que la configuración es anulada por otra configuración. Usted fuerza la carga usando la opción "-w" cuando usa launchctl load or unload.

Si tiene que forzar la carga o descarga de un archivo plist, significa que tiene una configuración que anula el plist. Esta anulación se crea cuando utiliza "-w", de lo contrario no se agregará ninguna anulación al archivo de anulaciones. Para evitar este caso, edite el archivo a continuación, busque la etiqueta de trabajo que desea eliminar y anule las líneas necesarias:

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

Por ejemplo, elimine esta línea

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

entonces podría usar: launchctl load or unload /Library/LaunchDaemons/com.mydomain.myjob.plistsin la necesidad de "-w" o "-F", no debería tener el mensajenothing found to load

Sylvain Rayé
fuente
1

Es posible que desee agregar el indicador -F para forzar la launchctlcarga de .plist. Además, asegúrese de que el .plist esté en las launchctlbúsquedas de rutas . Si su .plist está en otro lugar, también puede agregar el distintivo -D y especificar el dominio. Desde la página del manual:

-D dominio
Busque archivos plist (5) que terminen en * .plist en el dominio dado. Los dominios válidos incluyen "sistema", "local", "red" y "todos". Al proporcionar un tipo de sesión, hay un dominio adicional disponible para su uso llamado "usuario". Por ejemplo, sin un tipo de sesión dado, "-D system" se cargaría de los archivos de la lista de propiedades de / System / Library / LaunchDaemons. Con un tipo de sesión aprobado, se cargaría desde / System / Library / LaunchAgents.

Asegúrese de revisar detenidamente toda la información contenida en la página de manual; realmente puede arruinar las cosas si su llamada no está configurada correctamente.

soxman
fuente