본문 바로가기
Server/Linux

Crontab을 이용한 파이썬 환율 데이터 수집하기

by 노마드 산코디 2024. 1. 14.
728x90

크론탭(Crontab)은 유닉스 계열 운영 체제에서 주기적으로 작업을 실행하기 위한 스케쥴러이다. 크론탭을 활용하여 특정 시간, 날짜, 또는 주기에 따라 명령어나 스크립트를 자동 실행할 수 있다.

목차



    오늘은 지난번에 만들었던 환율 정보 수집 스케쥴 코드를 실제 우분투 서버에 크론탭을 이용하여 스케쥴 등록을 하고 데이터를 수집해보려고 한다. 크론탭을 사용하는 방법은 실제 업무에서 시스템이나 서버 개발을 하게 되면 유용하게 활용할 수 있기 때문에 간단한 스케쥴을 만들어보면서 크론탭을 이용해 보면 많은 도움이 될 것이다.

     

     


    크론탭의 기본 개념

    크론탭은 유닉스 및 리눅스 시스템에서 사용되는 작업 스케쥴러로, 주기적으로 반복되는 작업을 자동으로 실행할 수 있도록 도와주는 시스템 도구이다. 특정 시간에 명령어나 스크립트를 활용하여 실행할 수 있도록 예약하는 역할을 한다.

    - 크론탭의 표현식
    크론탭에서는 시간을 나타내는 표현식을 사용하여 작업을 예약한다.

    * * * * * scheduler_sourcecode

    위의 예시 코드를 보게 되면 앞의 '*' 5개는 각각 시간, 날짜를 표현하는 값이고, 마지막의 scheduler_sourcecode는 실행하고자 하는 소스코드나 스크립트 이름이다.

    첫 번째 * : 분(0 - 59)
    두 번째 * : 시간 (0 - 23)
    세 번째 * : 일 (1 - 31)
    네 번째 * : 월 (1 - 12)
    다섯 번째 * : 요일 (0 - 7, 7은 일요일)

    위의 설정 값에 맞춰서 원하는 시간과 날짜로 설정을 하게 되면 해당 설정된 시간마다 스케쥴러가 자동 실행된다.


    - 크론탭의 명령어

    crontab -e : 크론탭 편집 모드 진입
    crontab -l : 현재 사용중인 크론탭 작업 목록 확인
    crontab -r : 현재 사용중인 모든 크론탭 작업 삭제


    2. 크론탭으로 파이썬 환율 데이터 수집 스케쥴 실행

    지난번 파이썬으로 만들었던 환율 데이터 수집 소스 코드를 개발중인 우분투 서버로 스케쥴 실행하는 방법을 먼저 정리해보려고 한다.


    - 소스 코드 세팅

    /app/exchange_scheduler

    소스 코드는 서버의 /app 경로 하위로 올려서 세팅하였다.
    위의 경로 하위에 main.py 파일을 실행하면 이전 글에서 작성했던 스케쥴러 소스를 실행할 수 있다.


    - 크론탭 스케쥴 설정

    # 일배치, 매일 23시59분에 해당 스케쥴러 실행
    59 23 * * * python3 /app/exchange_scheduler/main.py

    crontab -e 명령어를 실행하고 위와 같이 스케쥴을 등록한다. 현재 작업중인 스케쥴은 매 10분마다 실행을 하고자 위와 같이 설정했다.

    설정을 저장하려면 ctrl + X 를 누르고 Y 선택을 하게 되면 스케쥴 등록한 내용이 저장되고, crontab -l 을 실행하면 등록한 스케쥴 목록을 확인할 수 있다.

    - 서버 타임존 설정
    만약 위와 같이 설정한 시간과 다른 시간대에 스케쥴러가 실행된다면 서버의 타임존이 다를 수 있으므로 타임존을 맞춰주면 된다.

    timedatectl

    작업중인 서버내에서 위의 명령어를 실행

    timedatectl 실행 결과화면

    명령어 실행 결과 위와 같이 Time zone 항목에 Asia/Seoul이 아니라면 타임존을 변경해 주면 된다. 
    혹시나 그냥 설정된 타임존으로 사용하려면 크론탭의 시간대 설정을 다르게 주면 된다.

    - 타임존 설정 변경

    sudo timedatectl set-timezone 'Asia/Seoul'

    위의 명령어를 이용해서 타임존의 설정을 변경해 줄 수 있다.

    timedatectl set-timezone 'Asia/Seoul' 명령어 실행 결과 확인

    위와 같이 Time zone의 값이 Asia/Seoul로 변경됐다면 끝!


    3. 쉘 스크립트를 활용한 크론탭 스케쥴 실행

    위에서 설정한 크론탭 스케쥴러는 파이썬 소스 코드를 직접 실행할 수 있도록 설정한 방법이다. 나는 개인적으로 쉘 스크립트를 만들어서 설정하고 실행하는 방식을 선호하기 때문에 쉘 스크립트로 설정하는 방식도 같이 정리하려고 한다.


    - 쉘 스크립트 코드

    #!/bin/bash
    
    # app 실행 경로
    APP_NAME="/app/exchange_scheduler/main.py"
    # PID 실행 명령어
    PID=`ps -ef | grep 'python3 '${APP_NAME}' ' | grep -v grep | awk '{print $2}'`
    
    if [ "${PID}" != "" ]
    then
        echo ${APP_NAME} [PID: ${PID}] is running ...
        exit
    fi
    
    nohup python3 ${APP_NAME} > /dev/null &
    echo ${APP_NAME} start ...

    위의 쉘 스크립트 코드를 정리하자면 ... 위에서 크론탭에 설정했던 app 실행 경로를 위와 같이 APP_NAME에 설정해 놓았다.
    PID 변수에 설정한 값은 스케쥴러가 실행중인 경우 중복될 수 있기 때문에 중복 체크를 하기 위해 프로세스 조회 명령어를 따로 설정하였다.
    위와 같이 쉘 스크립트 코드를 설정하였다면 그 다음은 크론탭에서 설정을 위의 스크립트로 변경해 주면 끝!


    - 크론탭에서 쉘 스크립트로 스케쥴 변경

    # 일배치, 매일 23시59분에 해당 스케쥴러 실행
    59 23 * * * /app/start_scheduler.sh

    아까 위에서 설정했던 코드 실행 방식에서 위와 같이 쉘 스크립트로 실행하도록 변경만 해줬다.
    이번 글에서 정리한 내용은 소스코드가 하나이기 때문에 소스 코드를 직접 설정하나 쉘 스크립트로 설정하나 크게 차이는 없다. 그러나 실행해야 하는 소스코드가 여러개가 되고 인자값 설정을 해주고 관리 포인트가 늘어난다면 쉘 스크립트로 정리해서 관리해 주는 것이 훨씬 좋다.



    4. 스케쥴 수집 데이터 확인

    스케쥴 수집 결과 데이터 확인

    3번에서 쉘 스크립트를 만들고 크론탭에 등록하여 약 2주간 매일 수집한 결과 데이터이다.
    매일 일배치로 23시59분마다 위의 코드를 실행하면서 수집된 데이터이다. 앞으로 위의 스케쥴을 통해 자동 수집된 데이터로 여러가지 다양한 서비스에 활용해 보고자 한다.

     


    마무리

    오늘은 지난번 환율 데이터 수집 소스 코드에 이어서 서버에 스케쥴 등록을 하고 수집된 결과까지 정리를 해봤다. 
    소스 코드 작업도 간단하고, 스케쥴 등록하고 확인하는 과정까지 간단해서 크게 어려움은 없을 것이다. 이제 자동 스케쥴러 작업의 한 사이클을 작업했으니 위의 내용을 토대로 다양한 경제 지표 데이터들을 추가로 개발해서 스케쥴러를 증가해 보려고 한다.
    최종적인 결과를 생각하면 아직 갈길은 멀지만 언제나 그렇듯 작은 부분부터 하나씩 작업하면 이렇게 간단하게 작업을 만들어 가면서 결과가 만들어 질 것 같다. 

    다음에는 어떤 경제 지표 데이터를 수집할지 또 고민을 해봐야겠다.


    https://sanblog.tistory.com/141

     

    파이썬을 이용하여 환율 정보 데이터 수집하기

    목차 환율 정보는 경제에서 매우 중요한 지표이며, 다양한 서비스 및 시스템에서 수집 활용이 되는 데이터이다. 파이썬을 이용하여 간단한 환율 정보 데이터 수집하는 방법을 제공하고자 한다.

    sanblog.tistory.com

     

    728x90
    반응형