수집기 원격 접속으로 일시키는 법
목적: lin1·lin2 등 소형 수집기(및 VPS 정거장)에 원격으로 접속해 raker를
배치·실행·모니터링하는 전 과정을 정리한다. 신임 실장·팀장급 세션도 이
문서만으로 바로 수집 업무를 배정할 수 있도록 작성.
---
0단계 — 배치 전 필수 확인 (건너뛰지 말 것)
_gw/raker_capacity.html을 먼저 확인한다 — 여유(적정 기준)가 큰 기기부터
배정한다. linux1처럼 이미 최대치를 넘긴 기기에 더 얹지 않는다.
정거장(디스크)이 있는 기기(특히 VPS)는 **_gw/_infra/vps_운용_인수인계.md와
05_정거장모니터링법.law.md 제1조 3단계 임계치**도 함께 확인한다 — 디스크가
작은 정거장(예: vps-in, 23GB)엔 신규 배치를 더 보수적으로 한다.
1단계 — SSH 접속 정보
| 기기 | 접속 | 계정 | 비고 |
|---|---|---|---|
| lin1 | ssh lin1 (172.30.1.50) | cj | ~/.ssh/config에 별칭 등록됨 |
| lin2 | ssh lin2 (172.30.1.52) | cj | 별칭 등록됨(2026-09-13 확인) |
| del1 | ssh d1 또는 ssh del1 (172.30.1.130) | sky | 비밀번호 없는 sudo |
| vps-us/jp/in | ssh vps-us / vps-jp / vps-in | root | ~/.ssh/config 별칭 등록됨, 각 1코어 |
연결 안정성 주의: VPS는 간헐적으로 SSH가 exit 255(연결 실패)를 반환할
때가 있다(오늘 vps-in에서 여러 차례 실측) — 재시도하면 대부분 성공한다.
한 번 실패했다고 그 기기가 죽었다고 단정하지 말고 2~3회 재시도한다.
2단계 — 기기 내부 구조 확인
각 수집기는 대체로 다음 구조를 공유한다(홈 디렉토리 기준):
``
~/raker/ # raker 스크립트 모음 디렉토리
~/raker_b_eu_hist_europeana_image1.py # 개별 raker 스크립트(역할.py)
~/raker_b_eu_hist_europeana_image1.md # 그 raker의 운용법 문서(역할.md 짝)
~/raker_out/ # 수집 결과물이 쌓이는 곳
~/disk_sensor.sh # 정거장 임계치 센서(05법 제2조)
~/station_sensor/{라벨}.status # 최신 사용률 1줄
~/station_sensor/{라벨}.log # 이력
`
작업 배정 전 필수: ~/station_sensor/*.status를 먼저 읽어 현재 사용률을
확인한다 — df 직접 조회보다 우선(05법 제2조③).
`bash
ssh lin1 "cat ~/station_sensor/*.status"
`
3단계 — 실제로 일 시키기(raker 실행)
기존 raker 스크립트를 재사용하는 경우(가장 흔함):
`bash
ssh lin1 "cd ~ && nohup python3 raker_b_eu_hist_europeana_image1.py \
--collect --limit <건수> --country '<국가>' --provider '<기관명>' \
> raker_out/<라벨>/log.txt 2>&1 &"
`
- --limit은 무한정 크게 잡지 않는다 — 정거장 여유(0단계에서 확인한 값)에
맞춰 현실적인 수치로 잡는다.
- 백그라운드 실행(nohup ... &)이 기본 — SSH 연결이 끊겨도 계속 돌게 한다.
새 raker가 필요하면 _naming_registry.tech.py 역할 목록(raker, ocrer,
cleaner 등)을 참고해 역할명을 먼저 정하고, 01_데이터구조법.law.md 제6조의
.역할.py+.역할.md 짝 규칙을 따른다.
4단계 — 배정 후 모니터링
12_그룹웨어법.law.md 제5조의5(목표-실행-문제점-개선점 4항목 기록)와
15_전체프로세스운영법.law.md 제6조를 따른다:
1. 착수 전 목표(수집량·예상 소요 시간) 기록
2. 완료 후 실행·문제점·개선점 4항목 기록
3. 민감/재수집난이도 높은 소스는 5~10분 주기로 점검(05법 제2조④) —
일반 소스는 15~30분 주기로 충분.
5단계 — 작업 종료·정리
`bash
ssh lin1 "pkill -f raker_b_eu_hist_europeana_image1.py" # 특정 raker 종료
ssh lin1 "ps aux | grep raker | grep -v grep" # 잔여 확인
`
수집 완료 데이터는 정거장에 방치하지 않고 05_정거장모니터링법.law.md
제1조의3(30~40G 청크 단위 회수) 원칙대로 회수한다.
---
🔴 실패 사례로 배우기 — vps-in 이중 watchdog 사고 (2026-09-13)
무슨 일이 있었나: vps-in에 raker를 배치했는데, **서로 다른 시점에
서로 다른 목적으로 만들어진 watchdog 스크립트 두 개**(disk_sensor.sh
— 이미지 raker 담당, vps_disk_watchdog.sh — 영상 raker 담당)가 **서로의
존재를 모른 채** 같은 디스크를 각자 기준으로 감시하고 있었다.
- disk_sensor.sh는 90%에서 이미지 raker를 완전히 kill
- vps_disk_watchdog.sh는 90%에서 영상 raker를 일시정지만 하고, 75%
밑으로 내려가면 자동 재개, 완전히 죽어있으면 자동 재시작까지 함
결과: 이미지 raker를 죽여도 영상 raker가 살아남아 있다가 디스크가 조금만
비면 바로 다시 채워서, **2026-09-11부터 2026-09-13까지 이틀 넘게 50~97%를
반복 진동**했다. 아무도 이 반복을 알아채지 못했다 — 로그엔 남았지만 사람에게
가는 알림이 없었기 때문이다.
교훈(수집 배정 시 반드시 확인):
1. 그 기기에 이미 다른 watchdog/자동화가 돌고 있는지 먼저 확인한다 —
crontab -l로 기존 자동화를 전부 확인하지 않고 새 raker만 얹으면, 안
보이는 곳에서 서로 다른 자동화가 충돌할 수 있다.
2. "일시정지 후 자동재개" 방식의 watchdog은 위험하다 — 완전 종료가
아니라 재개 조건이 있으면, 사람이 개입해 데이터를 치우기 전에 자동으로
다시 채워버릴 수 있다.
3. 로그만 쌓이고 알림이 안 가는 자동화는 있으나 마나다 — 70%
경고 단계에서 실제로 사람(세션)에게 알림이 가는지 확인한다.
참고: 이 사고의 전체 대응 기록은 05_정거장모니터링법.law.md 실행
사례 자료 및 16_예정사항관리법.law.md` 항목 3 참조.