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 mail para enviar correos con mi gmail. Escribí un bash script (IPSend.sh) usando ifconfig, grep, y mail. Ejecutar el script manualmente como cualquier usuario, incluyendo Root, funciona perfectamente y envía el correo electrónico a la dirección de correo electrónico especificada. Copiado el script a /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é en /Library/LaunchDaemons (-rw-r--r--@ 1 Root wheel 918 Dic 25 16:01 com.fer.ip.plist), lo depuré con plutil -lint hasta que el resultado fue correcto.
Cuando cargo con launchctl /Library/LaunchDaemon/com.fer.ip.plist (como Root) no me da ningún error el correo no se envía y el log muestra algo como
25 dic 16:18:00 dbe4b6a01 com.apple.launchd[1] ("com.fer.ip"): Estrangulando el respawn: Se iniciará en 6 segundos
25 dic 16:18:06 dbe4b6a01 com.apple.launchd[1] ("com.fer.ip"): Acelerando el respawn: Se iniciará en 10 segundos
Dec 25 16:18:37: --- último mensaje repetido 2 veces --- Dec 25 16:18:37 dbe4b6a01 com.apple.launchd[1] ("com.fer.ip"): Estrangulando el respawn: Comenzará en 10 segundos
Dec 25 16:18:37 dbe4b6a01 com.apple.launchd[1] (0x7f9170659600.anonymous.sendmail[20303]): Fallo al añadir el kevent para el PID 20303. Se descargará a la vuelta de MIG
Dec 25 16:18:37 dbe4b6a01 com.apple.launchd[1] (0x7f9170659600.anonymous.sendmail[20303]): Descargando el PID 20303 en el retorno MIG.
25 dic 16:18:47 dbe4b6a01 com.apple.launchd[1] ("com.fer.ip"): Estrangulando el respawn: Se iniciará en 10 segundos Dec 25 16:19:00: --- último mensaje repetido 1 vez ---
25 dic 16:19:00 dbe4b6a01 com.apple.launchd[1] ("com.fer.ip"): Estrangulando el respawn: Se iniciará en 7 segundos
La razón por la que digo "algo así" es que a veces no me aparece el "Failed to add kevent for PID" o aparece antes.
Estoy totalmente perdido. Ni idea de lo que significa el "Failed to add kevent for PID" o por qué no está funcionando como un proceso launchd 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>
Tanto los archivos de error estándar como los de salida estándar están siempre vacíos