목차

Automail.sh: 자동화 실행 래퍼 스크립트

Automail.shNewstoHR.py 파이썬 스크립트를 Linux 서버 환경에서 안정적으로 자동 실행하기 위해 만들어진 셸 스크립트입니다. 이 스크립트는 단순히 파이썬 스크립트를 호출하는 것을 넘어, 자동화된 작업 환경에서 발생할 수 있는 다양한 문제들을 사전에 방지하고, 실행의 안정성과 신뢰성을 확보하기 위한 핵심적인 래퍼(Wrapper) 역할을 수행합니다. 주로 crontab과 같은 시스템 스케줄러에 등록되어 사용되며, 파이썬 코드가 실행되기 전 필요한 모든 사전 작업을 체계적으로 처리하고, 실행 후 결과를 기록하여 모니터링을 용이하게 합니다.

1. 주요 기능 및 실행 순서


1) 실행 경로 설정

스크립트의 가장 첫 부분에서 cd “$(dirname “$0”)” 명령과 BASE_DIR=$(cd “$(dirname “$0”)” && pwd) 구문을 사용하여 스크립트가 실행되는 현재 디렉토리를 기준으로 작업 경로를 설정합니다.


2) 로그 기록 시작

스크립트의 시작을 알리는 로그를 지정된 로그 파일(cron.log)에 기록합니다.


3) 환경 변수 로드 및 파이썬 스크립트 실행

이 스크립트의 가장 핵심적인 로직으로, .env 파일에 저장된 민감한 정보(API 키, 데이터베이스 비밀번호 등)를 환경 변수로 안전하게 로드하면서 파이썬 스크립트를 실행합니다.


4) 실행 결과 로깅

NewstoHR.py 스크립트가 실행되면서 출력하는 모든 메시지(표준 출력)와 스크립트 자체의 오류 메시지(표준 오류)를 » “$LOG_FILE” 2>&1 구문을 통해 cron.log 파일에 모두 기록합니다.


5) 로그 기록 종료

스크립트의 모든 작업이 성공적으로 또는 오류와 함께 완료되었음을 알리는 종료 로그를 cron.log 파일에 기록합니다.

#!/bin/bash

# 스크립트가 위치한 디렉토리로 이동하여 상대 경로 참조 문제 방지
BASE_DIR=$(cd "$(dirname "$0")" && pwd)
cd "$BASE_DIR"

# 로그 파일 및 환경 설정 파일 경로 정의
LOG_FILE="./cron.log"          # 로그 파일 경로 (현재 스크립트 디렉토리 기준)
ENV_FILE="./.env"              # 환경 변수 파일 경로
VENV_PYTHON="./.venv/bin/python" # 파이썬 가상환경 인터프리터 경로
PYTHON_SCRIPT="NewstoHR.py"    # 실행할 파이썬 스크립트 파일명

# 스크립트 시작 로그 기록
echo "==================================================" >> "$LOG_FILE"
echo "===== Crontab 스크립트 시작: $(date) =====" >> "$LOG_FILE"
echo "==================================================" >> "$LOG_FILE"
echo "" >> "$LOG_FILE" # 가독성을 위한 빈 줄 추가

# .env 파일의 변수들을 환경변수로 설정하고 파이썬 스크립트 실행 (핵심 로직)
# '^#'으로 시작하는 주석 라인은 제외하고 환경 변수로 로드
env $(grep -v '^#' "$ENV_FILE" | xargs) "$VENV_PYTHON" "$PYTHON_SCRIPT" >> "$LOG_FILE" 2>&1

# 스크립트 종료 로그 기록
echo "" >> "$LOG_FILE" # 가독성을 위한 빈 줄 추가
echo "==================================================" >> "$LOG_FILE"
echo "===== Crontab 스크립트 종료: $(date) =====" >> "$LOG_FILE"
echo "==================================================" >> "$LOG_FILE"

결론적으로 Automail.sh는 복잡한 파이썬 프로젝트를 자동화 환경에서 안정적이고 효율적으로 구동하기 위한 필수적인 장치입니다. 이 래퍼 스크립트는 경로 문제 해결, 환경 변수 보안 로드, 가상 환경 활용, 그리고 체계적인 로깅을 통해 스케줄링된 작업의 신뢰성을 극대화하며, 운영상의 편의성과 문제 해결 능력을 크게 향상시킵니다.