Ho scritto un semplice script bash per verificare se un programma (fornito come unico argomento) è in esecuzione e inviare una e-mail a un indirizzo impostato nello script se non lo è. Lo script funziona se eseguito sulla riga di comando, ma non riesco per tutta la vita a farlo funzionare sotto launchd come agente utente (~ / Library / LaunchAgents) dove cerco di impostarlo per funzionare ogni minuto. L'ultima incarnazione del file .plist rilevante è (monitoraggio 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ì: lo script di bash è eseguibile e non ci sono voci nella Console che indicano problemi con il file .plist. Ho provato a fare / bin / bash il programma, ma questo non sembra fare alcuna differenza e leggere execvp (3) sembra suggerire che non lo farebbe. Ho anche provato ad avere tutto sotto <ProgramArguments>
senza fortuna. Qualsiasi aiuto sarebbe molto apprezzato in quanto mi sembra piuttosto semplice ed è molto frustrante che non riesco a farlo funzionare!
----------------------------- Modifica 1 ---------------- -----------
Ecco le basi essenziali dello script della 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
Non c'è molto da sbagliare lì ...