Ver un archivo en busca de cambios se puede lograr con un LaunchAgent. Por ejemplo, cree un archivo plist en ~/Library/LaunchAgents/watch.and.lol.plist
y llénelo 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. Luego carga el launchagent con el comando $ launchctl load ~/Library/LaunchAgents/watch.and.lol.plist
. Tan pronto como el archivo ~/Library/LaunchAgents/watch.and.lol.plist
ya no exista, este trabajo launchagent se descargará.
Ahora escriba un script de shell que observe los cambios en su archivo, 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 script de shell necesita un poco de trabajo adicional para que sea eficiente. Ahora sondea cada 2 segundos ( sleep 2
). Es mejor salir del script después de que se haya ejecutado el comando compile
. Eso requiere el almacenamiento de la salida del comando hash md5 que puede sobrevivir a la salida y la nueva conexión de este script de shell.