Спасибо всем за ответы! Мне просто нужно немного времени, чтобы принять во внимание некоторые из ваших ценных мыслей. Чтобы прояснить некоторые вещи, я просто хочу добавить, что:
1. Я не могу использовать параметры, так как большинство этих скриптов работают либо в init.d, либо запускаются cron.
2. Вся идея в основном создается для модемного подключения. А задержки пинга зависят от силы сигнала. Я даже не уверен, могу ли я уменьшить интервал проверки пинга ниже 1 с, чтобы иметь надежные проверки при низком уровне сигнала, но соединение все еще существует. Вот почему я подумал, что цикл пинга с интервалом по умолчанию, который просто выводит результат в какое-то легкодоступное место, будет лучшим компромиссом.
Это то, что я использовал совсем недавно
modemup(){
echo -e "AT+QRST=1,0\r\n" > /dev/ttyUSB2
ifdown $INTERFACE && ifup $INTERFACE
if [ "$(ifconfig | grep $INTFC_NAME)" ]; then
return 0
else
echo "Cant start modem interface"
return 1
fi
}
reconnect(){
MAX_ATTEMPTS=$1 #number of tries before reboot
TRIES=1
while [ $TRIES -le $MAX_ATTEMPTS ]; do
echo "Trying to reconnect..."
echo "Number of try: $TRIES"
modemup
/etc/init.d/network restart
sleep 10
if [ "$(ping -c 1 -w 3 8.8.8.8)" ]; then
break
fi
: $((TRIES+=1))
done
echo "Tried $MAX_ATTEMPTS times, couldnt reconnect. Rebooting..."
reboot
}
while true; do
if [ "$(ping -c 1 -w 3 8.8.8.8)" ]; then
rm -rf $NOCONFILE #if noconnection file exists delete it
else
mkdir -p $LOG_DIR/${DAY_DIR}
TIME=`date +%Y%m%d%H%M%S`
echo "$TIME: Connection lost" 2>&1 | tee -a $LOG_FILE
touch $NOCONFILE
reconnect $ATTEMPTS 2>&1 | tee -a $LOG_FILE
fi
sleep $INTERVAL
done