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" myemail@isp.com.xx

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


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.


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" myemail@isp.com.xx ]] && [[ echo "(X) SUCCESS: email sent" > ${MYSTDOUT} ; exit [0] ]]
    
    echo "(!) FAILURE: email not sent" 2> ${MYSTDERR} 
    
    exit [1]

Espero que esto ayude.


Muchas gracias por sus sugerencias. Investigaré esto y le haré saber los resultados.
FerOZ
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.