# 250801 크론잡 로그 동기화 설정

## 배경

### 이전 문서 참조
- [250731_로그저장소_SSHFS설정과_템플릿해결책.md](./250731_로그저장소_SSHFS설정과_템플릿해결책.md)
- [250731_claude_SSHFS권한문제해결.md](./250731_claude_SSHFS권한문제해결.md)

### 문제 상황
- Docker SSHFS 충돌로 중앙 로그 시스템 구축 실패
- 로그가 51124 서버 SSD에 저장되고 있음 (CLAUDE.md 규칙 위반)
- SSHFS 마운트는 되어있지만 Docker 볼륨 마운트 시 충돌 발생

## 해결 방안: 크론잡 동기화

### 오전 9시 30분 - 새로운 접근 방식 결정
로컬 개발자 제안: "24서버에 로그 저장하고 하루에 한번씩 크론잡으로 HDD로 넘기는 건 어때?"

장점:
1. Docker 설정 변경 불필요
2. SSHFS 충돌 없음
3. SSD 쓰기 성능 활용
4. 배포 시 추가 작업 불필요
5. 로그 손실 위험 감소

### 오전 9시 35분 - 스크립트 작성
```bash
# 스크립트 디렉토리 생성
mkdir -p /home/admin/scripts

# 동기화 스크립트 작성
/home/admin/scripts/sync_logs_to_hdd.sh
```

초기 실행 시 권한 문제 발생:
- `/var/log/sync_logs` 생성 실패 (Permission denied)
- `/home/admin/logs/sync_logs`로 변경하여 해결

### 오전 9시 38분 - SSHFS 권한 문제 발견
```
rsync: [receiver] mkstemp failed: Permission denied (13)
```

원인: SSHFS가 UID 999(docker)로 마운트되어 admin(UID 1001)이 쓸 수 없음

해결:
1. SSHFS를 UID/GID 매핑으로 재마운트
```bash
fusermount -u /mnt/51123logs
sshfs -o IdentityFile=/home/admin/.ssh/id_rsa_deploy,reconnect,uid=$(id -u),gid=$(id -g) \
      admin@192.168.219.45:/mnt/hdd/logs/51124-server /mnt/51123logs -p 51123
```

2. 51123 서버에서 디렉토리 권한을 admin으로 변경 (로컬 개발자가 수행)

### 오전 9시 41분 - 동기화 성공
모든 서비스 로그 동기화 완료:
- rb10508_test: 474,540 bytes 동기화
- rb10408_test: 0 bytes 동기화
- rb8001: 18,751 bytes 동기화
- skill_news: 125 bytes 동기화
- skill_email: 로그 디렉토리 없음

### 오전 9시 42분 - 크론탭 설정
```bash
# 크론탭 설정 (매일 새벽 3시)
0 3 * * * /home/admin/scripts/sync_logs_to_hdd.sh >> /home/admin/logs/sync_logs/cron.log 2>&1
```

## 최종 구조

### 51124 서버 (원본)
```
/home/admin/ivada_project/
├── rb10508_test/logs/
├── rb10408_test/logs/
├── rb8001/logs/
├── skill_news/logs/
└── skill_email/logs/
```

### 51123 서버 (백업)
```
/mnt/hdd/logs/51124-server/
├── rb10508_test/
├── rb10408_test/
├── rb8001/
├── skill_news/
└── skill_email/
```

## 발견된 문제

### rb10508_test 중복 디렉토리 구조
51124 서버에 이미 중복 구조 존재:
```
/home/admin/ivada_project/rb10508_test/logs/
├── rb10508_test_app.log
└── rb10508_test/
    └── rb10508_test_app.log (0 bytes)
```

이는 Docker 볼륨 마운트나 애플리케이션 설정 문제로 추정됨.

## 결과

1. **로그 백업 자동화 완성**: 매일 새벽 3시에 자동 실행
2. **SSD 공간 관리**: 7일 이상된 로컬 로그 자동 삭제
3. **CLAUDE.md 준수**: 로그가 최종적으로 HDD에 저장됨
4. **Docker 충돌 회피**: SSHFS 마운트 포인트와 Docker 볼륨 충돌 없음

## 교훈

1. **복잡한 해결책보다 간단한 방법이 낫다**: Docker SSHFS 통합보다 크론잡이 더 안정적
2. **권한 문제는 여러 레벨에서 발생**: SSHFS UID 매핑과 원격 디렉토리 권한 모두 확인 필요
3. **점진적 마이그레이션**: 실시간 동기화보다 배치 처리가 더 안전할 수 있음
4. **로그 파일 경로 정리 필요**: 중복 디렉토리 구조는 추후 정리 필요

---

작성일: 2025-08-01 09:30 - 09:45
작성자: Claude (51124 서버)
주제: Docker SSHFS 충돌 회피를 위한 크론잡 로그 동기화 설정

---

**2025-09-08 업데이트**:
- rb8001 파일 로깅 구현 완료 (app/core/logger.py)
- rb8001/logs/rb8001.log 생성 확인 (7.6KB)
- 내일 새벽 3시 크론잡에 자동 포함됨
- HDD 동기화 문제 해결 완료