지난 시간에 비트코인 자동매매 프로그램을 리눅스 서버에서 실행하는 방법에 대해서 살펴 보았는데요.
리눅스에서 프로그램을 수행한다 하더라도 예기치 않은 오류 또는 API를 제공하는 업체(업비트, 빗썸, 바이낸스 등)의 점검 또는 오류/과부하로 인해 프로그램이 중단되는 경우가 상당히 자주 발생하게 됩니다.
프로그램에 문제가 있어 발생하는 오류라면 프로그램의 수정이 있어야 하겠지만 그런 경우가 아니라면 프로그램 수정 없이 단순히 실행만 다시 해주면 되는데요. 이를 자동화 시키면 프로그램을 거의 99% 영구적으로 수행할 수 있게 됩니다.
그래서 이번 시간에는 비트코인 자동매매 프로그램을 스케쥴에 등록하여 중단되더라도 다시 실행하는 방법을 통해 프로그램을 연속적으로 실행할 수 있는 방법에 대해서 살펴 보도록 하겠습니다.
지난 시간에 알아 본 비트코인 자동매매 프로그램을 리눅스 서버에서 실행하는 방법은 아래 포스팅을 참고하시면 됩니다.
2021.12.21 - [프로젝트/비트코인 자동매매] - 리눅스 서버에서 비트코인 자동매매 프로그램 실행하기
목차 - 클릭하면 이동합니다.
리눅스 서버 스케쥴 등록하기
서버 시간 설정하기
스케쥴은 수행을 위한 Shell Script를 작성하여 Crontab에 등록하여 실행할 예정입니다. 스케쥴에 의한 실행이기 때문에 서버의 시간이 한국시간으로 올바르게 설정되어 있어야 합니다. 아래 포스팅을 참고하여 먼저 서버의 시간이 KST로 되어 있는지 확인하고 안되어 있다면 설정을 진행합니다.
2022.01.07 - [코딩스토리/리눅스] - 리눅스 서버시간 및 타임존 확인 및 변경하기
디렉토리 생성
그 다음은 크론탭에 등록할 쉘 스크립트를 모아 둘 폴더와 로그를 남길 폴더를 생성하겠습니다.
/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
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
마치며
앞으로 작성하는 프로그램들을 위와 같은 방법으로 스케쥴에 등록하면 업비트 서버 점검이나 과부하 등으로 인한 오류로 프로그램이 중단되더라도 계속해서 프로그램을 수행할 수 있습니다.
라인 메신저나 텔레그램 메신저로 프로그램 수행 시작시 메세지를 발송하도록 해 두시면 프로그램이 죽어서 다시 실행한 경우 빠르게 알 수 있어 로그를 분석하여 어떤 사유로 프로그램이 중단되었는지 확인도 할 수 있습니다.
요즘 시간이 많지 않아 포스팅을 하는 시간이나 답글을 다는데 시간이 좀 걸리고 있습니다. 양해 부탁 드리며 블로그를 구독하시면 최근 소식을 조금 더 빨리 받아보실 수 있으니 참고 부탁 드리겠습니다. 감사합니다.
'프로젝트 > 비트코인 자동매매' 카테고리의 다른 글
급등주 찾기 - 업비트 파이썬 비트코인 자동매매 프로그램 (19) | 2022.01.26 |
---|---|
비트코인 자동매매 프로그램 환경변수 파일로 빼기 - 보안 강화 (5) | 2022.01.25 |
파이썬 업비트 웹소켓 접속방법 - 비트코인 자동매매 프로그램 (20) | 2022.01.14 |
리눅스 서버에서 비트코인 자동매매 프로그램 실행하기 (33) | 2021.12.21 |
트레일링 스탑 자동 매도 프로그램(수정본) - 파이썬 업비트 비트코인 자동매매 (38) | 2021.11.24 |
비트코인 자동 매수 프로그램(수정본) - 파이썬 업비트 비트코인 자동매매 (24) | 2021.11.23 |