AWS Amazon Linux Crontab에서 VirtualEnv Python 스크립트 호출하기

Amazon Linux 2023

아마존 리눅스 2023은 아마존 웹 서비스(AWS)에서 공식으로 배포 및 관리하는 리눅스 이미지다. 엘라스틱 클라우드 컴퓨팅(EC2) 환경을 위한 서비스 등이 미리 구성되어 있어 EC2에서 사용하기에 최적의 편의성을 제공한다. 아마존에서 업데이트와 보안 패치를 지속적으로 적용하여 이미지를 배포하므로 소프트웨어 오류나 보안 취약점으로 인한 문제를 겪을 가능성이 낮다.

Crond Service Installation

아마존 리눅스 2023 이미지에는 Crond 서비스가 기본으로 포함되어 있지 않으므로, EC2 인스턴스를 생성하는 과정이나, 인스턴스 구동 이후 직접 yum 명령을 통해 Cronie 패키지를 설치해야 한다.

sudo yum install cronie -y

Crond 패키지를 설치했다면, systemctl 명령으로 서비스를 활성화 하고 실행시킨다. 서비스가 활성화 되었으므로, 이후 부터는 인스턴스와 함께 자동으로 실행된다.

# Enable service
sudo systemctl enable crond.service
# Start service
sudo systemctl start crond.service
# Status check
sudo systemctl status crond.service

Let’s execute VirtualEnved Python Script

여러 버전의 파이썬을 사용하거나, 프로젝트나 서비스별 독립된 환경을 만들기 위해서 VirtualEnv를 사용한다. VirtualEnv 환경이 적용된 콘솔에서 직접 파이썬 스크립트를 실행하는 것과 비슷하게, 아래와 같이 쉘 스크립트를 crontab에 등록한다.

Create a new task

아래의 crontab은 myscript.sh를 매 시 정각에 실행한다.

# /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
0 * * * * ec2-user $SHELL /home/ec2-user/myscript.sh

Create myscript.sh

사용자가 콘솔에서 실행하는 것과 동일하게 파이썬 스크립트를 실행할 수 있도록, 환경변수 및 VirtualEnv 환경을 맞춰준다. 만약 파이썬 스크립트 내에서 파일에 접근하는 등의 작업에 상대경로를 이용한다면, 스크립트 실행에 앞서 파이썬 파일이 있는 디렉토리로 이동해주는 것이 좋다.

# myscript.sh
#!/bin/bash
# Bash 환경 구성
source ~/.bash_profile
source ~/.bashrc
# VirtualEnv 환경 구성
source ~/myproject/.venv/bin/activate
# 디렉토리 변경 및 파이썬 스크립트 실행
cd ~/myproject/ && ./.venv/bin/python ./mypythonscript.py

쉘 스크립트 파일을 만들었다면, chmod u+x myscript.sh 명령으로 실행 권한을 설정한다.

Check service output

journalctl 명령으로 crond 서비스의 로그에서 해당 스크립트가 잘 실행되는지 확인한다.

# crond에서 파이썬 스크립트 실행 결과 메시지를 확인한다.
sudo journalctl -f --unit=crond.service

+ There are no comments

Add yours

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.