nfs 연결 고장 자동 검색 및 복구 프로그램
비 즈 니스 장면
응용 프로그램 간 에 파일 을 인터페이스 로 하여 디자인 을 간소화 하기 위해 단독 파일 전송 모듈 을 사용 하지 않 고 공용 nfs 서버 방식 으로 시스템 차원 에서 파일 의 업로드 와 다운 로드 를 자동 으로 완성 합 니 다. 그러나 유지 단계 에서 nfs 가 연결 할 수 없 는 문제 가 자주 발생 하여 응용 프로그램 io 오류 가 발생 하여 업무 의 정상 적 인 추진 에 영향 을 주 었 습 니 다.
원인 분석
1 > 클 라 이언 트 관리자 가 모 르 는 상황 에서 nfs server 가 있 는 서버 를 다시 시작 하여 원래 의 연결 점 이 nfs server 에 접근 할 수 없 게 되 었 습 니 다. 다시 mount 해 야 합 니 다.
2 > nfs client 엔 드 호스트 를 다시 시작 합 니 다. 자동 mount 나 mount 가 실패 하지 않 아 프로그램 이 잘못 되 었 습 니 다.
3 > 네트워크 고장 으로 nfs 연결 이 사용 되 지 않 음
대책
셸 프로그램 을 통 해 nfs mount 의 상황 을 정시 에 자동 으로 감지 합 니 다.
프로그램 구현
평소 nfs 를 수 동 으로 확인 할 때 df 명령 을 사용 합 니 다. nfs 연결 에 문제 가 있 으 면 동기 화 IO 이기 때문에 df 는 nfs 연결 이 가능 할 때 까지 기 다 려 야 합 니 다. 따라서 이번 프로그램 은 df 명령 의 실행 상황 을 통 해 nfs 가 정상 인지 아 닌 지 를 판단 합 니 다. 단, 두 프로 세 스 를 통 해 이 루어 져 야 합 니 다. 만약 에 한 프로 세 스 가 있 으 면 df 명령 카드 가 그곳 에 죽 으 면...프로그램 전체 가 거기에 걸 려 움 직 이지 않 기 때문에 셸 프로그램 두 개가 필요 합 니 다.
1. 주 셸 프로그램
하위 셸 프로그램 을 호출 하여 하위 셸 프로그램 을 배경 에서 실행 하도록 합 니 다.
sleep 30 초 후 pid 를 통 해 하위 셸 프로 세 스 가 종료 되 었 는 지 확인 합 니 다.
하위 프로 세 스 가 있 으 면 nfs 연결 에 이상 이 생 겼 음 을 설명 하고 이상 exit 2 로 돌아 갑 니 다.
메모: kill 하위 셸 프로 세 스 가 없습니다. nfs mount 가 성공 하면 df 가 성공 적 으로 돌아 갑 니 다. 하위 프로 세 스 는 자동 으로 종 료 됩 니 다. 물론 수 동 으로 kill 할 수도 있 습 니 다.
하위 프로 세 스 가 없 으 면 df | grep 명령 을 더 실행 하여 mount 연결 점 이 존재 하 는 지 확인 하 십시오.
mount 연결 점 이 존재 하지 않 으 면 mount 명령 을 실행 하여 연결 합 니 다.
마 운 트 에 성공 하면 성공 exit 0 으로 돌아 갑 니 다.
mount 에 실패 하면 이상 exit 1 로 돌아 갑 니 다.
2. 하위 셸 프로그램
pid 를 파일 에 기록 합 니 다.
df 명령 실행
주 프로그램
#!/bin/sh
echo "checknfs.sh start..."
workdir="/home/wk"
mdirdown="/data/download"
mdirup="/data/upload"
remoteip=1.2.3.4
rcdown=0
rcup=0
cd $workdir
sh ./checkdf.sh&
sleep 30
pid=`cat checkdfpid.log`
echo "got checkdf.sh pid is:"$pid
ps -p $pid
if [ $? -ne 0 ];
then
downcount=`df|grep $mdirdown|wc -l`
upcount=`df|grep $mdirup|wc -l`
if [ $downcount -ge 1 ] && [ $upcount -ge 1 ];
then
echo "checknfs.sh end normally..."
exit 0
else
if [ $downcount -lt 1 ];
then
mount $remoteip:$mdirdown $mdirdown
rcdown=$?
if [ $rcdown -ne 0 ];
then
echo "(mount fail) -> "$mdirdown
fi
fi
if [ $upcount -lt 1 ];
then
mount $remoteip:$mdirup $mdirup
rcup=$?
if [ $rcup -ne 0 ];
then
echo "(mount fail) -> "$mdirup
fi
fi
if [ $rcdown -eq 0 ] && [ $rcup -eq 0 ];
then
echo "checknfs.sh end normally(remounted)..."
exit 0
else
echo "checknfs.sh end abnormally(mount fail)..."
exit 1
fi
fi
else
echo "checknfs.sh end abnormally(df block)..."
exit 2
fi
서브루틴
#!/bin/sh
echo "checkdf.sh start..."
echo 'checkdf pid:'$$
echo $$ > checkdfpid.log
df
echo "checkdf.sh end normally..."
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.