프로젝트/비트코인 자동매매

리눅스 서버에서 비트코인 자동매매 프로그램 스케쥴 등록하여 실행하기

Tech&Fin 2022. 1. 12. 18:30
반응형

지난 시간에 비트코인 자동매매 프로그램을 리눅스 서버에서 실행하는 방법에 대해서 살펴 보았는데요.

 

리눅스에서 프로그램을 수행한다 하더라도 예기치 않은 오류 또는 API를 제공하는 업체(업비트, 빗썸, 바이낸스 등)의 점검 또는 오류/과부하로 인해 프로그램이 중단되는 경우가 상당히 자주 발생하게 됩니다.

 

프로그램에 문제가 있어 발생하는 오류라면 프로그램의 수정이 있어야 하겠지만 그런 경우가 아니라면 프로그램 수정 없이 단순히 실행만 다시 해주면 되는데요. 이를 자동화 시키면 프로그램을 거의 99% 영구적으로 수행할 수 있게 됩니다.

 

그래서 이번 시간에는 비트코인 자동매매 프로그램을 스케쥴에 등록하여 중단되더라도 다시 실행하는 방법을 통해 프로그램을 연속적으로 실행할 수 있는 방법에 대해서 살펴 보도록 하겠습니다.

 

지난 시간에 알아 본 비트코인 자동매매 프로그램을 리눅스 서버에서 실행하는 방법은 아래 포스팅을 참고하시면 됩니다.

2021.12.21 - [프로젝트/비트코인 자동매매] - 리눅스 서버에서 비트코인 자동매매 프로그램 실행하기

 

리눅스 서버에서 비트코인 자동매매 프로그램 실행하기

윈도우 환경에서 파이썬으로 만든 비트코인 자동매매 프로그램을 실행하면 오류나 업비트 서버 점검 등으로 인해 오류가 발생하는 경우 프로그램이 종료 되어 수동으로 다시 실행해 주어야 하

technfin.tistory.com

 

 

목차 - 클릭하면 이동합니다.

     

    리눅스 서버 스케쥴 등록하기

    서버 시간 설정하기

    스케쥴은 수행을 위한 Shell Script를 작성하여 Crontab에 등록하여 실행할 예정입니다. 스케쥴에 의한 실행이기 때문에 서버의 시간이 한국시간으로 올바르게 설정되어 있어야 합니다. 아래 포스팅을 참고하여 먼저 서버의 시간이 KST로 되어 있는지 확인하고 안되어 있다면 설정을 진행합니다.

     

    2022.01.07 - [코딩스토리/리눅스] - 리눅스 서버시간 및 타임존 확인 및 변경하기

     

    리눅스 서버시간 및 타임존 확인 및 변경하기

    리눅스 서버를 만들면 서버 시간이 한국 시간으로 기본 설정되지 않는 경우가 많은데요. 이런 경우 크론탭등의 스케쥴에 작업을 등록하여 수행할 때 원하는 시간에 동작하지 않는 문제가 발생

    technfin.tistory.com

     

    디렉토리 생성

    그 다음은 크론탭에 등록할 쉘 스크립트를 모아 둘 폴더와 로그를 남길 폴더를 생성하겠습니다.

     

    /home/python/cron : 크론탭 쉘 스크립트 보관용 폴더

    /home/python/logs : 로그 보관용 폴더

     

    mkdir cron
    mkdir logs

     

     

    프로그램 수행 용 쉘 스크립트 작성하기

    크론탭에 등록하기 위한 프로그램 수행 용 쉘 스크립트를 작성하겠습니다.

     

    파일위치 및 파일명 : /home/python/cron/monitoring.sh

    #!/bin/sh
    export PATH=$PATH:/usr/local/bin
    
    # Change Directory
    cd /home/python/
    
    # Run Program
    python ./trade_bot/monitoring.py I >> /home/python/logs/monitoring.log 2>&1

     

    프로그램 실행 체크 용 쉘 스크립트 작성하기

    이번에는 프로그램이 실행되고 있는지 Process ID를 체크하여 오류나 기타 사유로 종료 된 경우 프로그램을 다시 실행시키는 쉘 스크립트를 작성하겠습니다.

     

    파일위치 및 파일명 : /home/python/cron/pid_monitoring.sh

    반응형
    #!/bin/bash
    
    timestamp=`date +%Y/%m/%d/%H:%M`
    
    # BUY PROCESS CHECK
    PID=`ps -ef |grep -w 'trade_bot/monitoring.py' |grep -v grep|awk '{print $2}'`
    
    if [ -z "$PID" ]
    then
            echo "$timestamp"
            echo 'MONITORING PROCESS DEAD'
            /home/python/cron/monitoring.sh
    else
            echo "$timestamp"
            echo 'MONITORING PROCESS IS RUNNING'
    fi

     

    크론탭에 스케쥴 등록하기

    혹시 크론탭 사용법에 익숙하지 않으신 분들은 아래 포스팅을 참고하시면 도움이 될 것 같습니다.

     

    2022.01.07 - [코딩스토리/리눅스] - 리눅스 크론탭 사용법 - Linux crontab

     

    리눅스 크론탭 사용법 - Linux crontab

    리눅스에서 프로그램을 수행하다 보면 원하는 시간마다 또는 주기적으로 프로그램을 실행하거나 프로세스를 체크해야 할 일이 있는데요. 이런 경우에 유용하게 사용할 수 있는 기능이 바로 cron

    technfin.tistory.com

     

    crontab -e

    크론탭 수정 및 등록 명령어를 수행하여 아래와 같이 프로세스를 체크하는 쉘 스크립트를 등록합니다. 아래의 경우는 매 1분마다 쉘 스크립트를 수행하여 프로세스가 살아있는지 체크한 후 없으면 다시 실행하는 로직입니다.

     

    # Monitoring Process - every 1 mins
    */1 * * * * /home/python/cron/pid_monitoring.sh >> /home/python/logs/pid_monitoring.log 2>&1

     

    스케쥴에 의한 자동 실행

    1분이 경과되면 프로세스를 체크하는 쉘 스크립트가 자동으로 실행되고 프로세스가 살아있지 않기 때문에 프로그램을 수행하게 되며 프로그램 수행 로그는 monitoring.log에 쌓이게 됩니다.

     

    로그 정리

    이렇게 로그를 쌓게 되면 계속해서 로그가 누적되기 때문에 디스크 용량에 부담이 될 수 있습니다. 아래 포스팅을 참고하여 logrotate를 사용하면 몇일치 로그만 보관하기 때문에 편리하게 로그 용량을 관리할 수 있습니다. 꼭 설정하시기 바랍니다.

     

    2022.01.12 - [코딩스토리/리눅스] - 리눅스 로그 관리하기 - logrotate

     

    리눅스 로그 관리하기 - logrotate

    리눅스 서버에서 프로그램을 수행할 때 발생하는 에러 또는 수행 결과 등을 로그로 남기면 에러가 발생하거나 추후 결과를 확인하고 싶은 경우 등에 유용하게 사용할 수 있습니다. crontab을 이용

    technfin.tistory.com

     

    마치며

    앞으로 작성하는 프로그램들을 위와 같은 방법으로 스케쥴에 등록하면 업비트 서버 점검이나 과부하 등으로 인한 오류로 프로그램이 중단되더라도 계속해서 프로그램을 수행할 수 있습니다.

     

    라인 메신저나 텔레그램 메신저로 프로그램 수행 시작시 메세지를 발송하도록 해 두시면 프로그램이 죽어서 다시 실행한 경우 빠르게 알 수 있어 로그를 분석하여 어떤 사유로 프로그램이 중단되었는지 확인도 할 수 있습니다.

     

    요즘 시간이 많지 않아 포스팅을 하는 시간이나 답글을 다는데 시간이 좀 걸리고 있습니다. 양해 부탁 드리며 블로그를 구독하시면 최근 소식을 조금 더 빨리 받아보실 수 있으니 참고 부탁 드리겠습니다. 감사합니다.

    반응형