[Crontab] Crontab에서 Python 스크립트 실행 시 모듈 오류 해결

2025. 5. 4. 17:27·삽질
반응형
반응형

안녕하세요, 오늘은 Crontab에서 Python 스크립트 실행 시 모듈 오류 해결 방법을 소개해보려고 합니다.

 

🔍  문제 상황

리눅스 서버에서 Crontab을 사용해 Python 스크립트를 주기적으로 실행하려 했습니다.

하지만 Crontab에서는 ModuleNotFoundError 오류가 발생했고, 터미널에서 직접 실행할 때는 오류가 발생하지 않았습니다.

 

Crontab 설정

처음 설정한 Crontab은 다음과 같았습니다.

  • crontab -e로 설정(nano 에디터)
05 13 * * * python3 /path/test.py -t MTBC >> /data/log/cron.log 2>&1

 

오류 발생

Crontab 실행 후 cron.log에서 확인한 오류는 ModuleNotFoundError였습니다.

터미널에서 python3 /path/test.py -t MTBC를 실행하면 정상적으로 동작했기 때문에, Crontab 환경의 문제로 판단했습니다.

 

원인 분석

Crontab에서 Python 스크립트가 모듈을 찾지 못한 이유는 다음과 같습니다.

  1. 환경 변수 설정 필요
    작성한 Python 스크립트가 Oracle 데이터베이스와 연동되며, 이를 위해 ORACLE_HOME, LD_LIBRARY_PATH 등의 환경 변수가 필요했습니다. 터미널에서는 이미 설정된 환경 변수가 있었지만, Crontab에서는 설정되지 않았습니다.
  2. 제한된 환경 변수
    Crontab은 셸 환경과 달리 제한된 환경 변수로 실행됩니다. PYTHONPATH나 작업 디렉토리가 설정되지 않아 lib 모듈을 찾지 못했습니다.
  3. 작업 디렉토리 불일치
    Crontab은 기본적으로 홈 디렉토리(~)에서 실행됩니다. scheduler_process.py가 lib 모듈을 상대 경로로 참조하고 있다면, Crontab에서는 모듈 경로를 찾지 못합니다

 

 


 

⛏️ 시도한 해결책들

 

문제를 해결하기 위해 다음 단계를 거쳤습니다.

1. Crontab 동작 확인

먼저 Crontab 데몬이 실행 중인지 확인했습니다.

systemctl status cron

데몬이 정상적으로 실행 중이었고, Crontab 설정도 crontab -l로 확인해 올바르게 적용되었음을 확인했습니다.

 

2. 작업 디렉토리 설정 시도

Crontab에서 작업 디렉토리를 명시적으로 설정해 보았습니다.

05 13 * * * cd /home/msrtcs/scheduler && /usr/bin/python3 /home/msrtcs/scheduler/scheduler_process.py -t MTBC >> /home/msrtcs/scheduler/scheduler.log 2>&1

하지만 여전히 ModuleNotFoundError가 발생했습니다. 이는 스크립트에서 사용하고 있는 lib 모듈이 상대 경로로 참조되고, Crontab 환경에서 PYTHONPATH가 설정되지 않은 탓이었습니다.

 


 

💡 최종 방법

환경 변수 설정용 쉘 스크립트 작성

환경변수가 설정되지 않은 상태에서 파이썬 스크립트가 실행되는 게 문제라면, 환경변수를 설정한 후 파이썬 스크립트를 실행하면 되지 않나 ? 라는 생각이 들었습니다.

그래서 bash_profile이나 bashrc 파일에서 적용하는 환경변수를 그대로 옮긴 후 원하는 파이썬 스크립트를 실행하는 식으로 path_set.sh라는 쉘 스크립트를 작성했습니다.

export PATH=본인 환경변수 설정
export 다른 환경변수
...

python3 /path/test.py -t MTBC
 
그 후, chmod +x /test/path_set.sh 명령어를 통해 스크립트에 실행 권한을 부여했습니다.
 
 

Crontab 수정

Crontab에서 path_set.sh를 호출하도록 수정했습니다.

0 9 * * * /bin/bash /path/path_set.sh >> /data/log/cron.log 2>&1

 

이렇게 수정한 후 실행하니, 로그 파일(/data/log/cron.log)에 오류가 없었고, Python 스크립트가 정상적으로 실행되었습니다.
 




 


👀 Tips
  • 로그 디렉토리 권한: cron 로그를 작성할 수 있게, /data/log/ 디렉토리에 쓰기 권한이 있는지 확인하세요.
  • Python 경로 확인: Crontab과 터미널에서 동일한 Python 버전을 사용하는지 확인
     
  • 절대경로 사용: crontab 설정에서 사용하는 경로는 절대경로를 사용하자 !

 

🔚 마무리

리눅스 환경에서 발생하는 오류의 대부분은 권한 문제이거나, 환경변수 설정 문제이므로, 어떤 문제가 발생한다면 해당 부분을 먼저 확인하는 걸 추천한다.

반응형

'삽질' 카테고리의 다른 글

[FTP] FTP 전송 시 파일 끝부분이 잘리는 오류  (0) 2025.05.04
[Database Navigator] IntelliJ Community 버전에서 DB 도구 사용하기  (0) 2025.04.30
'삽질' 카테고리의 다른 글
  • [FTP] FTP 전송 시 파일 끝부분이 잘리는 오류
  • [Database Navigator] IntelliJ Community 버전에서 DB 도구 사용하기
함상진
함상진
  • 함상진
    개발Log
    함상진
  • 전체
    오늘
    어제
    • 분류 전체보기 (7)
      • 삽질 (3)
      • 프로젝트 (0)
      • 정보 (3)
      • 후기 (0)
      • Computer Science (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    안전 law드맵
    database navigator
    code 명령어
    ftplib
    인텔리제이 커뮤니티
    SQLD
    의존성 주입
    파일 누락
    ModuleNotFoundError
    DIP
    파일 전송
    intellij community
    인텔리제이
    DB Navigator
    vscode
    파일 처리
    python ftp
    python
    의존관계 역전원칙
    신규채용자교육
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
함상진
[Crontab] Crontab에서 Python 스크립트 실행 시 모듈 오류 해결
상단으로

티스토리툴바