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
grep
tres veces, solo use:ifconfig | awk '/broadcast/{print $2}'
Respuestas:
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.
Espero que esto ayude!
F.
fuente
Algunas sugerencias
En la lista, cambie:
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:
Espero que esto ayude.
fuente