He escrito un script bash simple para verificar si un programa (suministrado como su único argumento) se está ejecutando y enviar un correo electrónico a una dirección establecida en el script si no lo está. La secuencia de comandos funciona si se ejecuta en la línea de comandos, pero por mi vida no puedo hacer que funcione bajo launchd como agente de usuario (~ / Library / LaunchAgents) donde trato de configurarlo para que se ejecute cada minuto. La última encarnación del archivo .plist relevante es (monitorear 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í: la secuencia de comandos bash es ejecutable y no hay entradas en la Consola que indiquen problemas con el archivo .plist. He intentado hacer / bin / bash el programa, pero eso no parece hacer ninguna diferencia y leer execvp (3) parece insinuar que no lo haría. También he intentado tener todo bajo <ProgramArguments>
sin suerte también. Cualquier ayuda sería muy apreciada ya que esto me parece bastante básico y es muy frustrante no poder hacerlo funcionar.
----------------------------- 1st Edit ---------------- -----------
Aquí están los conceptos básicos reducidos del script de shell:
#!/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 para ir mal allí ...