# skill-news 좀비 프로세스 및 Gitea Actions 배포 문제 해결 **날짜**: 2025-09-04 **작업자**: admin **관련 서비스**: skill-news, Gitea Actions **서버**: 51124 (192.168.219.52) ## 문제 1: Chrome headless 좀비 프로세스 67개 발생 ### 증상 ```bash ps aux | grep defunct | wc -l # 67 ``` - headless_shell 프로세스가 좀비로 남음 - 부모 프로세스: skill-news 컨테이너 (PID 3024266) ### 원인 - Docker 컨테이너에서 PID 1 프로세스(Python)가 자식 프로세스 정리 못함 ### 해결 ```yaml # skill_news/docker-compose.yml services: skill-news: init: true # 좀비 프로세스 정리용 build: . container_name: robeing-skill-news ``` ### 결과 ✅ 해결 완료 - 컨테이너 재시작 후 좀비 프로세스 67개 → 1개로 감소 - 1개는 claude 관련 git 프로세스(무관) - skill-news 컨테이너 정상 작동 중 (healthy) - Gitea Actions 자동 배포 성공 - 2025-09-04 재확인: 정상 작동 유지 ## 문제 2: Gitea Actions YAML 문법 오류 ### 증상 ``` Workflow config file is invalid. Please check your config file: yaml: line 76: could not find expected ':' ``` ### 원인 - heredoc 사용시 YAML 파서가 내용을 YAML로 해석 ### 첫 번째 시도 (실패) ```yaml # .gitea/workflows/cicd.yml sudo tee .env > /dev/null << 'ENVFILE' NEWS_SERVICE_PORT=8505 ENVFILE ``` - `sudo tee` → `cat`으로 변경했으나 여전히 오류 ### 최종 해결 ```yaml # heredoc 대신 echo 명령어 사용 echo "NEWS_SERVICE_PORT=8505" > .env echo "NEWS_SERVICE_HOST=0.0.0.0" >> .env # ... 나머지 환경변수들 ``` ## 문제 3: 51124 서버 SSH 배포 실패 ### 증상 - Actions runner(51123)가 로컬 경로 `/home/admin/ivada_project/skill-email` 접근 시도 - "그런 파일이나 디렉터리가 없습니다" 오류 ### 해결 ```yaml # .gitea/workflows/cicd.yml 전면 재작성 - name: Setup SSH run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY_51124 }}" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key ssh-keyscan -p 51124 -H ${{ secrets.SSH_HOST_51124 }} >> ~/.ssh/known_hosts - name: Deploy to 51124 Server run: | ssh -p 51124 -i ~/.ssh/deploy_key admin@${{ secrets.SSH_HOST_51124 }} << 'DEPLOY_SCRIPT' cd /home/admin/ivada_project/skill_news git pull origin main --rebase docker compose down docker compose up -d --build DEPLOY_SCRIPT ``` ### 필요한 시크릿 - `SSH_PRIVATE_KEY_51124`: SSH 개인키 - `SSH_HOST_51124`: 192.168.219.52 ## 문제 4: Health check 성공해도 Actions 실패 표시 ### 증상 ``` ✅ Service is healthy! # Actions는 빨간 X 표시 (exit status 1) ``` ### 원인 - heredoc 내부 `exit 0`이 SSH 세션 전체를 종료 ### 해결 ```bash # 변경 전 if curl -f http://localhost:8505/health; then echo "✅ Service is healthy!" exit 0 # SSH 세션 종료됨 fi # 변경 후 if curl -f http://localhost:8505/health; then echo "✅ Service is healthy!" break # 반복문만 종료 fi ``` ## 최종 상태 ### 배포 확인 (2025-09-04 14:47) ```bash docker ps | grep robeing-skill-news # cfcdb2a7221e skill_news-skill-news Up 54 seconds (healthy) ps aux | grep defunct | wc -l # 3 (skill-news 관련 없음) curl http://localhost:8505/health # {"status":"healthy"} ``` ### 커밋 이력 - d96d040: docker-compose.yml에 init: true 추가 - 1e843dd: YAML heredoc을 echo로 변경 - 9abd417: SSH 배포 방식 전면 재작성 - 1dfa735: Health check exit 0 → break 변경 ## 참고 문서 - 250820_happybell80_skill-email_DB통합및Actions배포.md (SSH 배포 구조) - 250819_happybell80_GmailItem구현및GitActions설정.md (heredoc 문제) - 250728_happybell80_nginx프록시및CI배포문제해결.md (exit 0 문제)