3 votos

MPD tartamudeo cuando se ejecuta bajo launchd

De fondo

Como un adicto a la terminal, he empezado a jugar con una combinación de mpd (Music Player Daemon) y un jugador, ncmpcpp (NCurses Media Player Cliente C++).

He instalado estos a través de Homebrew una simple brew install mpd ncmpcpp. Un poco de configuración más tarde, y las aplicaciones que están funcionando bastante bien. El efecto es realmente impresionante: ncmpcpp playing some random things

El problema que me encuentro es que cuando quiero ejecutar mpd automáticamente en lugar de tener que lanzar en mi terminal. Viene con un launchd plist, así que tengo que instalar, y parece que funciona - El problema es que lo estoy jugando, se que es un MP3, streaming de audio desde un servidor, o lo que sea, el audio se entrecorta cada 5 segundos

Esto absolutamente no ocurre cuando mpd se invoca directamente desde la línea de comandos, sólo cuando es disparado a través de launchd.

Aquí está lo que el plist parece:

<!--homebrew.mxcl.mpd.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>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>homebrew.mxcl.mpd</string>
    <key>ProcessType</key>
    <string>Interactive</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/opt/mpd/bin/mpd</string>
        <string>--no-daemon</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>WorkingDirectory</key>
    <string>/usr/local</string>
</dict>

El ProcessType interactive fue agregado por mí en un intento de obligar a launchd para dar el demonio de mayor prioridad, a ningún efecto.

La depuración?

Si nos dtruss el proceso, hay una gran explosión de idéntica gettimeofday mensajes correlacionada con cada tartamudeo. Se parece a esto:

gettimeofday(0x10A03FD40, 0x0, 0x1000)       = 1428698761 0

Cosas que ya he eliminado

  • De la CPU y de e / s de Disco

El sistema es relativamente tranquila - durante el tartamudea, mpd no está ni siquiera en el top 25 de la memoria o el uso de la CPU, y la carga es muy por debajo de 1.0

  • Incorrecta medio ambiente, causando mala config para ser cargado

Mi mpd config es el único ser cargado desde ~/.mpdconf - mismo que cuando ejecuto a mano.

Este parece ser un síntoma de la forma launchd elige para manejar el proceso.

La última pregunta

¿Por qué el demonio y entonces se portan mal cuando se ejecuta bajo launchd, pero no cuando se ejecuta a través de la terminal?

Pregunta extra:

¿Qué acerca de la forma en que launchd comienza procesos podrían estar haciendo este comportamiento manifiesto?

2voto

Gustaf Ekeberg Puntos 26

Tuve el problema similar y google me llevó a este hilo. Ahora tengo una solución al problema si alguien encuentra esto.

Basta con retirar la --no-daemon línea.

Esto parece funcionar bien:

<?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>homebrew.mxcl.mpd</string>
    <key>WorkingDirectory</key>
    <string>/usr/local</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/opt/mpd/bin/mpd</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X