Tratando de usar launchd para hacer que mi iMac se ejecute 10.7.5 para enviarme un correo electrónico, su dirección IP no funciona

1

Esta es la primera vez que uso launchd, así que hay muchas cosas que no sé.

Un poco de información de fondo.

Configuré todo para poder usar el comando de correo para enviar correos electrónicos con mi gmail. Escribió un script bash (IPSend.sh) usando ifconfig, grep y mail. Ejecutar el script manualmente como cualquier usuario, incluido el root, funciona perfectamente y envía el correo electrónico a la dirección de correo electrónico especificada. Copié el script en / usr / local / bin / los directorios tienen permisos rwxr-xr-x y el script -rwxr-xr-x @ todo es root: wheel. Creó un archivo plist y lo copió a / Library / LaunchDaemons (-rw-r - r - @ 1 root wheel 918 25 de diciembre 16:01 com.fer.ip.plist), lo depuró con plutil -lint hasta que el resultado fue OKAY.

Cuando ejecuto load /library/LaunchDaemon/com.fer.ip.plist (como root) no recibo ningún error, el correo electrónico no se envía y el registro muestra algo como:

25 de diciembre 16:18:00 dbe4b6a01 com.apple.launchd [1] ("com.fer.ip"): reactivación de estrangulamiento: comenzará en 6 segundos
25 de diciembre 16:18:06 dbe4b6a01 com.apple.launchd [1] ("com.fer.ip"):
reactivación de estrangulamiento: comenzará en 10 segundos 25 de diciembre 16:18:37: --- último mensaje repetido 2 veces --- 25 de diciembre 16:18:37 dbe4b6a01 com.apple.launchd [1] ("com.fer.ip"): reactivación de aceleración: comenzará en 10 segundos el
25 de diciembre 16:18:37 dbe4b6a01 com.apple.launchd [1] (0x7f9170659600.anonymous.sendmail [20303]): no se pudo agregue kevent para PID 20303. Se descargará en MIG return
25 de diciembre 16:18:37 dbe4b6a01 com.apple.launchd [1] (0x7f9170659600.anonymous.sendmail [20303]): Descarga PID 20303 en MIG return.
25 de diciembre 16:18:47 dbe4b6a01 com.apple.launchd [1] ("com.fer.ip"): reactivación de estrangulamiento: comenzará en 10 segundos 25 de diciembre 16:19:00: --- último mensaje repetido 1 vez ---
25 de diciembre 16:19:00 dbe4b6a01 com.apple.launchd [1] ("com.fer.ip"): reactivación de estrangulamiento: comenzará en 7 segundos

La razón por la que digo "algo como esto" es que a veces no aparece el mensaje "No se pudo agregar kevent para PID" o aparece antes.

Estoy totalmente perdido No tengo idea de lo que significa "No se pudo agregar kevent para PID" o por qué no funciona como un proceso de lanzamiento cuando funciona manualmente. ¡Por favor ayuda!

Aquí está mi script cambiando mi dirección de correo electrónico:

#!/bin/sh

ifconfig | grep -o -E [0-9]+[.][0-9]+[.][0-9]+[.][0-9]+ |grep -v "127" |grep -v "255" | mail -s "iMac" [email protected]

y aquí está mi archivo 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.fer.ip"</string>

        <key>ProgramArguments</key>

        <array> 
            <string>/usr/local/bin/IPSend.sh</string>
        </array>

        <key>OnDemand</key>
        <false/>

        <key>StartInterval</key>
        <integer>60</integer>

        <key>KeepAlive</key>
                <true/>

        <key>StandardOutPath</key>
        <string>/tmp/test.stdout</string>

        <key>StandardErrorPath</key>
        <string>/tmp/test.stderr</string>

</dict>
</plist>

Los archivos de error estándar y de salida estándar siempre están vacíos

FerOZ
fuente
En lugar de canalizar greptres veces, solo use:ifconfig | awk '/broadcast/{print $2}'
user3439894

Respuestas:

1

No sé por qué los perdí la primera vez, pero al revisar su problema en este momento, noté algunas inconsistencias en el archivo plist que podrían ser el problema. Creo que esto solucionará tu problema.

    <?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.fer.ip</string>
                            <key>Program</key>
                                <string>/usr/local/bin/IPSend.sh</string>
                            <key>RunAtLoad</key>
                                <true/>
                            <key>KeepAlive</key>
                                <false/>    
                   </dict> 
</plist>

Espero que esto ayude!

F.

Francis de ResponseBase
fuente
0

Algunas sugerencias

  1. En la lista, cambie:

    OnDemand to true; KeepAlive to false
  2. Rediseñe la secuencia de comandos de shell para informar el estado a la salida estándar o falla e informar al error estándar. Me gusta esto:

    #!/bin/bash
    
    MYSTDOUT=/tmp/test.stdout
    
    MYSTDERR=/tmp/test.stderr
    
    [[ ifconfig | grep -o -E [0-9]+[.][0-9]+[.][0-9]+[.][0-9]+ | grep -v "127" | grep -v "255" | mail -s "iMac" [email protected] ]] && [[ echo "(X) SUCCESS: email sent" > ${MYSTDOUT} ; exit [0] ]]
    
    echo "(!) FAILURE: email not sent" 2> ${MYSTDERR} 
    
    exit [1]

Espero que esto ayude.

Francis de ResponseBase
fuente
Muchas gracias por sus sugerencias. Investigaré esto y le haré saber los resultados.
FerOZ