La vigilancia de un archivo para los cambios se puede lograr con un LaunchAgent. Por ejemplo, crear un archivo plist en ~/Library/LaunchAgents/watch.and.lol.plist
y llenarlo con este contenido:
<?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>watch.and.lol</string>
<key>ProgramArguments</key>
<array>
<string>/Users/Shared/changeAction.sh</string>
<string>-force</string>
</array>
<key>WatchPaths</key>
<array>
<string>/private/var/radmind/client/.radmindOnDemand</string>
</array>
</dict>
</plist>
Ahora asegúrese de que el archivo /private/var/radmind/client/.radmindOnDemand
existe. A continuación, cargue el launchagent con el comando $ launchctl load ~/Library/LaunchAgents/watch.and.lol.plist
. En cuanto el archivo ~/Library/LaunchAgents/watch.and.lol.plist
ya no existe, este trabajo de launchagent se descargará.
Ahora escribe algún shell script que vigile tu archivo en busca de cambios, como:
chsum1=""
while [[ true ]]
do
chsum2=`md5 /private/var/radmind/client/.radmindOnDemand`
if [[ $chsum1 != $chsum2 ]] ; then
compile
chsum1=`md5 /private/var/radmind/client/.radmindOnDemand`
fi
sleep 2
done
Nota: este shell script necesita un poco de trabajo extra para hacerlo eficiente. Ahora sondea cada 2 segundos ( sleep 2
). Mejor es salir del script después de la compile
se ha ejecutado el comando. Eso requiere el almacenamiento de la salida del comando hash md5 que puede sobrevivir a la salida y relanzamiento de este shell script.