He escrito un simple bash script para comprobar si un programa (suministrado como único argumento) se está ejecutando y enviar un correo electrónico a una dirección establecida en el script si no lo está. El script funciona si se ejecuta en la línea de comandos, pero no puedo conseguir que funcione bajo launchd como agente de usuario (~/Library/LaunchAgents) donde intento configurarlo para que se ejecute cada minuto. La última encarnación del archivo .plist relevante es (controlando Dropbox):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!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>greencollar.Dropbox.checkRun</string>
<key>StartInterval</key>
<integer>60</integer>
<key>Program</key>
<string>/Users/greencollar/Documents/code/proc_check.sh</string>
<key>ProgramArguments</key>
<array>
<string>proc_check.sh</string>
<string>Dropbox</string>
</array>
</dict>
</plist>
Sí, el bash script es ejecutable y no hay entradas en la consola que indiquen algún problema con el archivo .plist. He intentado hacer que /bin/bash sea el programa, pero eso no parece hacer ninguna diferencia y la lectura de execvp(3) parece sugerir que no lo haría. También he intentado tener todo bajo <ProgramArguments>
sin ninguna suerte también. ¡Cualquier ayuda sería muy apreciada ya que esto me parece bastante básico y es muy frustrante que no pueda conseguir que funcione!
----------------------------- 1ª edición ---------------------------
Aquí están los fundamentos del shell script:
#!/bin/bash
PROC=$1
if ! /usr/bin/pgrep $PROC > /dev/null
then
/bin/echo "$PROC is not running!" | /usr/bin/mail -s "$PROC down" email@mydomain
fi
No hay mucho que hacer mal ahí...
0 votos
¿Has ejecutado con la ruta completa como primer argumento en ProgramArguments - también cuáles son los permisos en el script? (la forma más fácil es usar LaunchControl u otros programas para editar el script)
1 votos
Además, cuando dices que no funciona, ¿cómo puedes saber si funciona?
3 votos
Sin omitir nada, salvo poner un marcador de posición adecuado para algo que es sensible, por ejemplo, el dirección de correo electrónico y contraseña etc., edite su pregunta para incluir el contenido del
proc_check.sh
shell script. Porque sin él, no puede haber un proceso completo de solución de problemas que se hace fácilmente o tratando de replicar lo más exacto posible, donde el problema es.0 votos
@Mark, gracias por el comentario sobre mi respuesta anterior, ahora borrada. Me hizo probar el
.plist
en la pregunta, que reconozco que no lo había hecho porque creí ver un problema en ella, y sí se activó (en mi sistema al menos). Así que no creo que el problema esté ahí. Mi nueva respuesta creo que puede dar en el clavo de dónde puede estar el problema. Obviamente, sin ver el contenido de la script No puedo asegurarlo, pero lo más probable es que el problema esté ahí.1 votos
He probado tanto el
.plist
y elproc_check.sh
, utilizando mi$HOME
y el resto de su camino, por supuesto, y esto funciona cuando es llamado porlaunchd
para mí en las pruebas con "Caculator" ysay $PROC is not running
. No probé el envío de correo electrónico ya que mi sistema no está configurado para hacerlo. Así que es posible que desee probar como lo hice para ver si eso funciona y, a continuación, si lo hace la solución de problemas tendrá que ser hecho en cómomail
puede estar siendo manejado cuando se dispara porlaunchd
. Por cierto, estoy usando OS X 10.8.5, ¿qué versión usas tú?0 votos
@Mark Ahora estoy ejecutando con el primer arg de <ProgramArguments> como ruta completa. Pero de todas formas se disparaba sin haber hecho eso. No he dicho que no se ejecute. He dicho que no lo hacía trabajo .