찰리의 놀이터

[Linux] EC2에서 Python 파일 스케쥴링하기 본문

Linux

[Linux] EC2에서 Python 파일 스케쥴링하기

차알리 2023. 3. 17. 14:48

최근 AWS EC2에서 DRF 서버에 보낼 요청을 스케쥴링했던 방법을 공유합니다.

cron 이란?

cron은 유닉스 계열 컴퓨터 운영체제(Linux 등)의 시간 기반 잡 스케쥴러입니다.

특정한 작업을 설정한 시간, 날짜, 간격에 따라 주기적으로 실행할 수 있도록 하는 것을 잡 스케쥴러(Job Scheduler)라고 합니다.

cron table의 준말인 crontab 파일에 의해 구동되며 시스템 관리자용과 유저용이 구분되어 있습니다.

crontab은 crond라는 daemon에서 동작합니다.

여기서 daemon은 사용자가 직접 제어하지 않고, 백그라운드에서 여러 작업을 하는 프로그램을 말합니다.

cron 이해하기

/etc/cron.d
소프트웨어 패키지를 설치할 때 필요한 주기적인 작업을 등록하는 공간으로 사용합니다.
임의의 사용자 권한으로 실행할 수 있습니다.

/etc/cron.allow
허용파일이 있는 경우 파일 내 지정된 사용자만 crontab을 등록할 수 있습니다.
지정되지 않은 사용자는 crontab 명령어를 실행할 수 없습니다.

/etc/cron.deny
허용파일이 없는 경우 이 거부파일이 사용됩니다.
파일 내 지정된 사람을 제외한 나머지 사용자에게 crontab 명령어 실행 권한을 부여합니다.

/var/spool/cron/
사용자가 등록한 cron을 저장하는 디렉토리입니다.

cron 사용방법

cron 데몬 구동 확인

ps -ef | grep crond

cron 명령어

crontab -u 사용자명 : 루트관리자는 해당 사용자 crontab 파일을 보거나 삭제 또는 편집이 가능합니다.

crontab -e : 예약된 작업을 생성 또는 수정합니다.

crontab -l : 예약된 작업리스트를 보여줍니다.

crontab -r : 예약된 작업을 삭제합니다.

crontab 파일 형식

.---------------- Minute (0 - 59)
| .------------- Hour (0 - 23)
| | .---------- Day (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

예시 1. 매 분마다 py_sample 파일 실행

* * * * * bash /home/ubuntu/py\_sample.sh

예시 2. 5분마다 py_sample 파일 실행
*/5 \* \* \* \* bash /home/ubuntu/py\_sample.sh

error log

crontab에서 error log를 작성하기 위해서는 추가로 코드를 작성해야합니다.

* * * * * bash /home/ubuntu/py\_sample.sh >> /home/ubuntu/log/로그파일이름.log 2>&1

2>&1은 에러를 로그에 기록하기 위한 명령어입니다.

리눅스에서 0은 표준입력, 1은 표준출력, 2는 표준에러를 의미합니다.

systemlog에서 crontab log 확인

cat /var/log/syslog | grep CRON

MTA 설치

MTA는 Mail Transfer Agent의 약자입니다.
에러를 해결할 수 있는 방법은 두 가지가 존재하는데, MTA를 설치하거나, 로깅 기능을 없애는 방법이 있습니다.
MTA를 설치하는 방법을 사용해보겠습니다.

  1. postfix를 설치합니다.
    sudo apt-get install postfix
  2. YES를 입력하면 다음 화면이 등장합니다.
  3. No Configuration을 선택하면 설치가 완료됩니다.
  4. 결과

cron service start

cron을 모두 작성했으면 아래 명령어를 통해 cron을 재시작해줍니다.
$ sudo service cron reload
$ sudo service cron restart

python 파일 Shell Script 작성 방법

우선 현재 사용하고 있는 Shell을 파악하기 위해 아래와 같은 명령어를 입력합니다.
$ echo $SHELL

저는 EC2에서 Miniconda를 활용하여 파이썬을 실행하고 있습니다.
콘다 가상환경을 켜둔 채로 $ which python 명령어를 통해 현재 실행중인 파이썬 실행파일의 위치를 파악합니다.

home 디렉토리에 Shell Script 파일을 생성합니다.
~$ vi py_sample.sh

생성한 파일에 다음 내용을 입력합니다.
#!bin/shell이름
python_실행_파일_위치 실행시킬_파이썬_파일_위치

여기서 절대경로를 입력해주는게 가장 좋습니다.

Shell Script를 작성하지 않고 crontab 파일에서 바로 실행하는 코드를 작성하셔도 무방합니다.

'Linux' 카테고리의 다른 글

[Linux] Ubuntu Timezone 변경하기  (0) 2023.03.17
CLI(Command Line Interface)란?  (0) 2022.06.19