[토이 프로젝트] 자동 갱신 게임 명부 제작(5) - AWS EC2에서 crontab 사용하기

chaejm55·2022년 8월 24일
0

0. 이번 단계 진행 아이디어

AWS EC2를 이용하여 cronjob을 사용해 매일 자동실행을 시켜보자!😀

1. AWS EC2 인스턴스 생성 및 설치

ubuntu LTS를 OS 이미지로 인스턴스를 만들고 ssh로 접속하여 python, 라이브러리 등을 설치합니다. 인스턴스 생성 및 접속 과정은 생략합니다.
python은 pyvenv를 통해 가상환경을 구성하여 사용하였습니다.

1) pyvenv를 통한 가상환경 구성

  1. 가상환경 설치
    $ sudo apt-get install python3
    $ sudo apt-get install python3-venv
  2. 가상환경 생성
    (가상환경을 만들 디렉터리 생성 및 이동)
    $ cd ~
    $ mkdir maple
    $cd maple
    (가상환경 생성)
    $python -m venv maple_venv
  3. 가상환경 실행
    $. maple_venv/bin/activate

2) 기존에 사용했던 라이브러리 설치

아래는 설치할 라이브러리 목록입니다.
$pip install gspread
$pip install selenium

이후의 코드 작업은 ~/maple 경로에서 작업했습니다.

2. pyvirtualDisplay 사용하기

GUI 환경이 아닌 CLI 환경에서는 일반적인 chrome 창을 띄울 수 없으므로 pyvirtualDisplay를 사용하여 가상창을 만들었습니다.

1) 구글 크롬 및 드라이버 설치

$wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
$sudo apt-get update
$sudo apt-get install google-chrome-stable

설치 후 자신의 크롬 버전을 다음 명령어로 확인했습니다.
$google-chrome -version

버전에 알맞은 크롬 드라이버를 다음 명령어로 설치했습니다.
여기서는 ~/maple 경로에 크롬 드라이버를 설치했습니다.
(설치할 디렉터리로 이동)
$cd ~
$mkdir maple
$cd maple

(크롬 드라이버 다운로드)
$wget -N http://chromedriver.storage.googleapis.com/본인 크롬 버전 입력/chromedriver_linux64.zip

(압축 해제로 크롬 드라이버 설치)
$sudo unzip chromedriver_linux64.zip

다음으로 메인 가장 윗줄에 pyvirtualDisplay를 사용하는 코드를 추가했습니다.

2) 패키지 및 라이브러리 설치

가상 환경 조성을 위한 패키지와 파이썬 라이브러리를 설치했습니다.

$apt-get install xvfb
$pip install pyvirtualdisplay
$pip install xlrd

3) 코드 수정

가상 디스플레이 활용을 위해 코드 추가 및 driver 생성 코드 수정을 했습니다.


...
from pyvirtualdisplay import Display

def main():
	# 가상 디스플레이 사용 코드 추가
    display = Display(visible=0, size=(1920, 1080))
    display.start()
    ...
    
    # driver 생성 코드 수정
    options = webdriver.ChromeOptions()
	options.add_argument("headless")
	options.add_argument("disable-gpu")
	driver = webdriver.Chrome("/home/ubuntu/maple/chromedriver", options=options)
    ...
    

3. crontab 사용하기

메이플 랭킹 데이터는 오전 3~4시 사이에 일일 1회 갱신이 되므로 갱신 버튼 클릭은 하루에 한번만 하면됩니다. 이 작업을 자동화 하기 위해 crontab을 이용하여 매일 오전 10시 30분 경(통상 패치 시간(오전 10시) 고려)에 자동 실행 되도록 해보았습니다.

1) 코드 실행용 셸 스크립트 생성

crontab으로 실행할 셸 스크립트를 만들어 셸 스크립트를 통해 작성했던 python를 실행할 수 있도록 했습니다.

먼저 ~/maple 경로로 이동했습니다.
$cd ~/maple

셸 파일을 작성했습니다.
vim maple_shell.sh

#!/bin/bash

cd $(dirname $0)

. maple_venv/bin/activate

python refresh_character.py

2) crontab 수정

다음 명령어를 입력해 crontab을 에디터로 열었습니다.
$sudo vim /etc/crontab

그리고 작업을 추가했습니다.

...
#매일 오전 10시 30분에 ubuntu 계정으로 갱신 스크립트 실행
30 10 * * * ubuntu /home/ubuntu/maple/maple_shell.sh`
...

이제 매일 오전 10시 30분에 crontab으로 maple.gg 데이터를 자동으로 갱신하고 갱신된 정보를 스프레드 시트로 자동으로 가져올 수 있게 되었습니다.

4. 다음 고민

매일 실행결과를 쉽게 확인하고 처리할 방법이 없을까?🤔

5. Reference

[LAB] Ubuntu python3 가상환경 venv 설치하기

AWS EC2에서 웹드라이버 환경 설정.

profile
여러가지를 시도하는 학생입니다

0개의 댓글