Introduzione:
Ogni tanto se un mount NFS non è più connesso al server o qualcosa va storto con la connessione NFS, eseguendo il comando 'ls mountpoint' si blocca il terminale finché non premo CTRL-C. Quindi ho cercato di capire uno script che verrà eseguito come cron job e mi dirà quando un montaggio NFS è andato storto. Ho dovuto tornare a trucchi non ortodossi poiché eseguire un semplice comando "stat mountpoint &" all'interno dello script avrebbe bloccato anche lo script. Quindi uso il comando "at now" che esegue il comando in modo indipendente per lo script che lo ha avviato. Ecco un esempio di tale script.
#!/bin/bash
# Name: MOUNT_CHECK.sh
# Purpose: Checks the health of the NFS mountpoint given by argument
# it kills the at/stat process and exits with an exit code 2 if the timeout has expired.
#-------------------------------------------------------------------
startdelay=3
timeout=10
# processes to be excluded in the 'ps | grep' test
excludes="openvpn|istatd|rpc.statd"
if [ $# -ne 1 ]; then
echo "ERROR: Needs mountpoint as argument"
echo "Usage: MOUNT_CHECK.sh MountPoint"
exit 2
fi
#
echo "/usr/bin/stat $1" | /usr/bin/at now
sleep $startdelay
while (ps ax | egrep -v "grep|$excludes" | grep -q stat); do
let count=${count}+1
sleep 1
if [ $count -ge $timeout ]; then
kill $(pidof stat)
#echo "Mountpoint $1 : FAILED to connect before timeout of $timeout sec."
exit 2
fi
done