3 votos

¿Por qué es mi 'launchd tarea de no responder a los cambios en los archivos observados?

Tengo un launchd tarea que no desencadena cuando un archivo cambios, y no puedo entender por qué se está fallando.

Cuando se carga la .plist a continuación con

launchctl load /Users/Rax/Library/LaunchAgents/com.crashplan.status.plist

el script especificado se ejecuta (una vez) y se ejecuta como se esperaba (yo también puedo ejecutar correctamente directamente desde la línea de comandos). Pero cuando el archivo en el reloj camino (/Library/Logs/CrashPlan/history.log.0) cambios, no pasa nada.

Lo que podría ser falta que impide que el esta tarea de responder a los cambios de archivos?


<?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.crashplan.status</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/Rax/Library/Automation/Shell/crashplan_status</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Library/Logs/CrashPlan/history.log.0</string>
    </array>
</dict>
</plist>

2voto

moodforaday Puntos 2633

Por lo que vale la probé aquí y parece estar funcionando para mí. En cualquier momento que yo manualmente anexa algo en /Library/Logs/CrashPlan/historia.registro.0 la secuencia de comandos hizo llegar activa.

Como tal, esta no es realmente una respuesta, pero es más una serie de consejos para depurar launchd:

Un par de consejos para el diagnóstico de launchd:

1) el Uso de la stdout y stderr rutas y ver si algo se pone conectado a ellos. Usted puede hacer esto añadiendo estas líneas a su com.crashplan.status.plist archivo.

<key>StandardErrorPath</key>
<string>/tmp/com.crashplan.status.stderr.log</string>
<key>StandardOutPath</key>
<string>/tmp/com.crashplan.status.stdout.log</string>

(Si varias personas utilizan el mismo Mac, es posible que desee utilizar una ruta de acceso diferente de /tmp/ pero si es sólo usted, entonces es como bien de un lugar como cualquier otro.)

2) Con el #1 también puede ser que desee para ajustar la secuencia de comandos (/Usuarios/Rax/Biblioteca/Automatización/Shell/crashplan_status) para incluir la información de depuración, tales como cuando se inicia y cuando termina. Que puede ser tan simple como algo parecido a esto añadió cerca de la parte superior de la secuencia de comandos:

echo "$0: started at `date`"

y algo como esto cerca de la final

echo "$0: finished at `date`"

3) Con #2 también puede que quiera usar algo como terminal-notificador para mostrar que cuando el script que está siendo llamado, al menos hasta que usted consiga más allá de la etapa de depuración.

4) Si nada de esto ayuda, usted debe comprobar el estado de salida de cualquier comando que usted llama en crashplan_status y ver si todo sale correctamente. Por ejemplo, digamos que usted se estaban ejecutando echo en su crashplan_status

5) Es el entorno en launchd diferente a la de su shell de alguna manera? Este es el mejor verificado mediante la adición de esta línea cerca de la parte superior de su launchd secuencia de comandos:

/usr/bin/printenv | /usr/bin/open -ef

lo que hará que el printenv se envía a la salida estándar (stdout) y los resultados se abrió en TextEdit.

El más común de 'medio ambiente' problema que me encuentro es no tener el $PATH configurado correctamente para launchd. Se suele establecer en su concha ficheros de inicio, tales como .bashrc y heredado por cualquier secuencias de comandos de shell que se ejecuta desde la Terminal, pero no será por launchd.

Usted puede ver el camino que launchd utilizado por:

launchctl getenv PATH

Si usted desea hacerlo, puede establecer

launchctl setenv PATH

por ejemplo, para mi sistema sería:

launchctl setenv /Users/luomat/Dropbox/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin

Si usted no quiere tener que recordar para establecer que cada vez que inicie su computadora, usted puede agregar a /etc/launchd.conf mediante la adición de una línea de este:

setenv PATH /Users/luomat/Dropbox/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin

obviamente el cambio que para que coincida con su sistema. También, no se sorprenda si /etc/launchd.conf no existe en su sistema. Puede que tenga que crear. Para hacer eso, te recomiendo un simple:

sudo pico -w /etc/launchd.conf

y cuando haya terminado la edición, pulse control + X y siga las indicaciones para guardar los cambios.

0voto

PrivateSniper Puntos 345

Sé que este es un viejo post, pero como no tiene respuesta, voy a exponer una sugerencia. ¿Todavía tiene el problema o se ha resuelto finalmente ? Si no puedo tener una idea de como he experimentado el mismo problema.

En la terminal, compruebe si su visto archivo se ha extendido argumentos mediante este comando :

ls -l@

Si el archivo se ha extendido argumentos como este :

com.apple.quarantine    32

pruebe y escriba este comando para eliminar extendido argumentos (usar sudo si es necesario) :

xattr -d -r com.apple.quarantine /Library/Logs/CrashPlan/history.log.0

en tu caso...

Parece launchd watchpaths ignorar los archivos que han de cuarentena extendido argumento...

Espero que le puede ayudar.

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