Shell Script로 Python 실행하고 로그 남기기
개발 환경을 구축하다 보면 자동화가 필요한 순간이 찾아옵니다. 특히 Python 스크립트를 주기적으로 실행하고 그 결과를 로그로 남겨야 할 때, Shell Script는 강력한 도구가 됩니다. 이번 포스팅에서는 Shell Script를 사용하여 Python 파일을 실행하고 결과를 로그 파일에 남기는 방법을 알아보겠습니다.
Shell Script란?
Shell Script는 쉘에서 사용할 수 있는 명령어들의 조합을 모아 만든 배치(batch) 파일입니다. 리눅스/유닉스 환경에서 여러 명령어를 파이프(pipe), 리다이렉션(redirection), 필터(filter) 등으로 연결하여 원하는 결과를 얻을 수 있습니다. 자주 사용하는 명령어 조합을 스크립트로 만들면 복잡한 작업을 단일 명령으로 간편하게 실행할 수 있습니다.
스크립트는 인터프리터(interpreter)에 의해 해석/실행되는 프로그램을 말합니다. 어떤 종류의 인터프리터를 사용하느냐에 따라 스크립트의 종류가 결정됩니다:
- 쉘 스크립트: Bash, sh, zsh 등의 쉘 인터프리터 사용
- Perl 스크립트: Perl 인터프리터 사용
- Python 스크립트: Python 인터프리터 사용
- Tcl/Tk 스크립트: Tcl/Tk 인터프리터 사용
쉘의 종류에 따라 본(Bourne) 쉘 스크립트, C 쉘 스크립트, 콘(Korn) 쉘 스크립트, TC 쉘 스크립트 등으로 나뉘기도 합니다.
Python 실행과 로그 생성 Shell Script 작성하기
이제 실제로 Python 스크립트를 실행하고 그 결과를 로그 파일에 기록하는 Shell Script를 만들어 보겠습니다.
1. Shell Script 파일 생성
먼저 빈 Shell Script 파일을 생성합니다:
$ vi job.sh
2. Shell Script 내용 작성
생성한 job.sh 파일에 다음 내용을 입력합니다:
# Python 파일이 있는 디렉토리로 이동
cd /0.python/naver/
# 로그 파일에 빈 줄 추가
echo "" >> debuglog.log
# 현재 날짜와 시간을 로그 파일에 기록
date +%Y-%m-%d_%T >> debuglog.log
# 실행 시작 메시지 기록
echo "***** Start *****" >> debuglog.log
# Python 스크립트 실행 및 출력 결과를 로그 파일에 추가
python3 main.py >> debuglog.log
# 실행 종료 메시지 기록
echo "***** End *****" >> debuglog.log

3. 실행 권한 부여
Shell Script 파일을 실행하기 위해 실행 권한을 부여합니다:
$ chmod +x job.sh
4. Shell Script 실행
권한을 부여한 후 다음 명령으로 스크립트를 실행할 수 있습니다:
$ ./job.sh
5. 로그 확인
실행이 완료되면 debuglog.log 파일에 다음과 같은 내용이 기록됩니다:
2023-03-12_14:28:45
***** Start *****
[Python 스크립트의 출력 내용]
***** End *****

Shell Script 코드 설명
- #!/bin/bash: 셔뱅(Shebang) 라인으로, 스크립트를 실행할 인터프리터를 지정합니다. 여기서는 Bash 쉘을 사용합니다.
- cd /0.python/naver/: Python 스크립트가 있는 디렉토리로 이동합니다.
- echo "" >> debuglog.log: 로그 파일에 빈 줄을 추가합니다. >> 연산자는 파일에 내용을 추가(append)합니다.
- date +%Y-%m-%d_%T >> debuglog.log: 현재 날짜와 시간을 YYYY-MM-DD_HH:MM:SS 형식으로 로그 파일에 기록합니다.
- echo "***** Start *****" >> debuglog.log: 실행 시작 구분선을 로그 파일에 추가합니다.
- python3 main.py >> debuglog.log: Python 스크립트를 실행하고 그 출력 결과를 로그 파일에 추가합니다.
- echo "***** End *****" >> debuglog.log: 실행 종료 구분선을 로그 파일에 추가합니다.
활용 방법
이렇게 작성한 Shell Script는 다양한 방식으로 활용할 수 있습니다:
1.수동 실행: 필요할 때마다 직접 스크립트를 실행합니다.
2.cron을 이용한 자동 실행: 정해진 시간에 자동으로 실행되도록 cron job을 설정합니다.
# 매일 오전 9시에 job.sh 실행
0 9 * * * /path/to/job.sh
3.에러 처리 추가: Python 스크립트 실행 결과에 따라 다른 작업을 수행하도록 확장할 수 있습니다.
python3 main.py >> debuglog.log
if [ $? -ne 0 ]; then
echo "Error occurred during execution!" >> debuglog.log
# 에러 발생 시 수행할 추가 작업
fi
4.로그 로테이션: 로그 파일이 너무 커지지 않도록 로그 로테이션을 구현할 수 있습니다.
마치며
Python 스크립트를 Shell Script로 실행하고 로그를 남기는 방법을 알아보았습니다. 이 방법은 Python 스크립트 뿐만 아니라 다른 프로그램 실행 결과를 기록하는 데도 활용할 수 있습니다. 로그를 남기는 방식은 Python 내에서 직접 로깅하는 방법과 위와 같이 Shell Script를 통해 외부에서 로깅하는 방법이 있으며, 상황에 맞게 적절한 방법을 선택하면 됩니다.
로그를 남기는 것은 프로그램 실행 과정과 결과를 추적하고 문제가 발생했을 때 디버깅하는 데 매우 중요합니다. 특히 서버에서 자동으로 실행되는 스크립트의 경우, 로그 없이는 무슨 일이 일어났는지 파악하기 어렵습니다. 따라서 적절한 로깅 전략을 세우고 구현하는 것이 안정적인 시스템 운영의 기본이라 할 수 있습니다.
참고 자료:
'Dev Log > Preferences' 카테고리의 다른 글
[Dev log] Ubuntu에 Python 설치하기 (0) | 2021.01.14 |
---|---|
[Dev log] vim 사용법 (0) | 2021.01.13 |
[Dev log] Linux crontab 사용법, 리눅스 예약작업 반복작업 (0) | 2021.01.13 |
[Dev log] Using Python file in Shell Script (0) | 2021.01.12 |
[Dev log] NAS Docker ubuntu use ChromeDriver (2) | 2021.01.12 |