반응형
리눅스에서 쉘 스크립트를 이용하여 이더넷 RX TX dropped 패킷 검사하는 스크립트를 짜보았다.
보드의 EtherNET PORT 의 문제를 의심하고 있는 상황이라 이러한 검사를 진행하게 되었다.
위에서는 리눅스라고 설명을 하였지만, 실제로 사용중인 임베디드 보드는 커스텀 OS 이다보니
패키지 설치가 불가능한 상황이라, 일정 주기를 위한 crontab 사용이 불가능하였다.
그리하여 init demon rc1 ~rc6 에서 해당 스크립트를 부팅시 실행하고 스크립트 안에서 loop 돌며 검사를 하는
시스템을 만들었다.
1분마다 EtherNET Port RX TX dropped 를 체크하여 dropped 가 발생하면 이전값을 비교하여, log 를 남긴다.
이전 값을 비교하기 위해 시스템 변수인 export 를 사용하였으나, 재부팅시 사라지는 문제로 profile demon 을 수정하여
값을 초기화 할당하였으나, 런터임 스크립트 실행보다 profile demon 이 더 늦게 실행 할 수 밖에 없어서
스크립트 안에 변수를 모두 할당하여 만들게 되었다.
#!/bin/sh
LOG_PATH=/temp/log
TIME=$(date +"%y-%m-%d %T")
SUM_VALUE=0
GOAL_VALUE=1000
NEW_ETH0_RX_DROPPED=`ifconfig eth0 | grep dropped | grep RX | awk '{print $4}' | cut -d ':' -f 2`
NEW_ETH0_TX_DROPPED=`ifconfig eth0 | grep dropped | grep TX | awk '{print $4}' | cut -d ':' -f 2`
PRE_ETH0_RX_DROPPED=0
PRE_ETH0_TX_DROPPED=0
while :
do
echo "dropped shell script loop start"
if [ $NEW_ETH0_RX_DROPPED -ne $PRE_ETH0_RX_DROPPED ]; then
echo "[$TIME] RX dropped > $NEW_ETH0_RX_DROPPED" >> $LOG_PATH 2>&1
echo "dropped RX detect >>>>>>>> /temp/log"
$PRE_ETH0_RX_DROPPED=$NEW_ETH0_RX_DROPPED
fi
if [ $NEW_ETH0_TX_DROPPED -ne $PRE_ETH0_TX_DROPPED ]; then
echo "[$TIME] TX dropped > $NEW_ETH0_RX_DROPPED" >> $LOG_PATH 2>&1
echo "dropped TX detect >>>>>>>> /temp/log"
$PRE_ETH0_TX_DROPPED=$NEW_ETH0_TX_DROPPED
fi
SUM_VALUE=$((SUM_VALUE + 1))
if [ "$SUM_VALUE" -eq "$GOAL_VALUE" ]; then
break
fi
sleep 1m
done
반응형