mongodb 의 유지 보수 로 인 한 grep, awk, sed 와 파이프 의 응용

우선 최근 에 mongodb 관 리 를 자동화 하고 싶 습 니 다. 현재 mongodb 를 유지 하려 면 매일 총 기록 수 와 매일 새로 추 가 된 기록 수 를 기록 해 야 하기 때 문 입 니 다. 두 개의 조회 문 구 는 db. videos. count () 와 db. vid 일 뿐 입 니 다.add. count (), 하지만 매일 mongodb 의 셸 에 들 어가 이 두 문 구 를 실행 하고 날 짜 를 기록 하 며 한 텍스트 파일 에 데 이 터 를 복사 합 니 다. 매일 이렇게 반복 되 는 작업 입 니 다.그래서 스 크 립 트 를 쓰 려 고 합 니 다. Linux 에서 crontab 를 통 해 자동 으로 유지 보수 합 니 다.
 
여 기 는 mongodb 1.6.4, 64 비트, Liux 버 전 을 사용 합 니 다.
인터넷 에 있 는 몬 godb 의 중국어 자 료 는 형 편 없 이 적어 서 스스로 해 볼 수 밖 에 없다.먼저 mongo 명령 의 인 자 를 조회 한 결과 셸 의 인 자 를 발 견 했 습 니 다. mongodb 홈 페이지 에 설명 이 있 습 니 다. mongodb 는 이 매개 변 수 를 통 해 js 스 크 립 트 를 실행 하고 홈 페이지 를 통 해 예 를 들 수 있 습 니 다.https://github.com/mdirolf/shell_presentation/blob/master/slides. js, 발견 도 어렵 지 않 습 니 다.이어서 Liux 서버 에 간단 한 스 크 립 트 를 썼 습 니 다.
 
mongo.js
print("all count:" + db.videos.count() );
print("add count:" + db.vid_add.count() );
 
이어서 Liux 에서 시도 해 보 았 습 니 다.
/mongo localhost/myCollections --shell/home/bosshida/mongo.js
 
진짜 됐어 요: 출력
MongoDB shell version: 1.6.4
connecting to: localhost/crawler
type "help" for help
all count:113358593
add count:2940633
 
그러나 이 때 는 mongodb 의 셸 콘 솔 에 들 어 갔 습 니 다. 이 프로 세 스 를 닫 으 려 면 발 을 더 써 야 합 니 다.
경험 에 따 르 면 ps 를 통 해 모든 프로 세 스 를 표시 하고 grep 를 통 해 프로 세 스 ID 를 찾 은 다음 kill 을 제거 합 니 다.
grep 자체 의 프로 세 스 를 제거 하고 인터넷 에서 자 료 를 찾 았 기 때문에 grep - v 'grep' 를 통 해 grep 가 함 유 된 프로 세 스 를 제거 할 수 있 습 니 다. 마지막 으로 파 이 프 를 통 해 어떻게 kill 을 통 해 찾 아 낸 프로 세 스 를 제거 할 수 있 습 니까? 스 크 립 트 는 다음 과 같 습 니 다.
ps -ef| grep '/home/mongodb/bin/mongo local/myCollection --shell mongo.js' | grep -v 'grep'| awk '{print $2}' | xargs kill
 
그 중에서 awk 는 프로 세 스 번 호 를 추출 한 것 입 니 다. xargs kill 은 인터넷 에서 찾 아 온 것 입 니 다. man kill 에서 도 설명 을 찾 지 못 했 습 니 다. 전 달 된 매개 변 수 를 pid 로 하고 이어서 kill 로 떨 어 뜨 린 것 같 습 니 다.
 
그 중에서 awk 에 대해 잘 모 르 고 일부 자 료 를 통 해 대충 용법 도 알 수 있 습 니 다. 주로 awk '/pattern/{action}' 이라는 규칙 을 파악 하 는 것 은 pattern 을 통 해 일치 하 는 (정규) 를 찾 아 action 을 수행 하 는 것 입 니 다.
 
Kill 이 떨 어 진 후 아직 끝나 지 않 았 습 니 다. 데 이 터 를 추출 하여 파일 에 기록 해 야 합 니 다.
 
그 중에서 추출 할 데 이 터 는 단지
all count:113358593
add count:2940633

 
이 두 줄 때문에 나 는 다른 스 크 립 트 를 써 서 데 이 터 를 추출 하고 다른 파일 에 썼 다.
 
echo  `date`>> result.txt | sed -n '4,5p' stat.txt | awk -F : '{print $2}' >> result.txt
 
설명:
스 크 립 트 의 프로 세 스 는 먼저 날 짜 를 result. txt 파일 에 기록 한 다음 sed 를 통 해 stat. txt 파일 의 4, 5 줄 을 추출 하고 awk 를 통 해 각 줄 의 데 이 터 를 result. txt 파일 에 추가 합 니 다.
sed - n '4, 5p' stat. txt 는 파일 의 네 번 째 줄 부터 다섯 번 째 줄 까지 내용 을 캡 처 한 다 는 뜻 이다.
awk - F: '{print $2}' 는 콜론 ':' 를 구분자 로 하여 두 번 째 수 치 를 인쇄 한 다 는 뜻 입 니 다.
 
이렇게 하면 작업 이 대충 끝 납 니 다. 마지막 으로 crontab 를 쓰 고 매일 정시 에 스 크 립 트 를 실행 하면 Mongodb 의 데 이 터 를 자동 으로 기록 합 니 다.

좋은 웹페이지 즐겨찾기