AWS EC2를 이용하여 cronjob을 사용해 매일 자동실행을 시켜보자!😀
ubuntu LTS를 OS 이미지로 인스턴스를 만들고 ssh로 접속하여 python, 라이브러리 등을 설치합니다. 인스턴스 생성 및 접속 과정은 생략합니다.
python은 pyvenv를 통해 가상환경을 구성하여 사용하였습니다.
$ sudo apt-get install python3
$ sudo apt-get install python3-venv
$ cd ~
$ mkdir maple
$cd maple
$python -m venv maple_venv
$. maple_venv/bin/activate
아래는 설치할 라이브러리 목록입니다.
$pip install gspread
$pip install selenium
이후의 코드 작업은 ~/maple 경로에서 작업했습니다.
GUI 환경이 아닌 CLI 환경에서는 일반적인 chrome 창을 띄울 수 없으므로 pyvirtualDisplay를 사용하여 가상창을 만들었습니다.
$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를 사용하는 코드를 추가했습니다.
가상 환경 조성을 위한 패키지와 파이썬 라이브러리를 설치했습니다.
$apt-get install xvfb
$pip install pyvirtualdisplay
$pip install xlrd
가상 디스플레이 활용을 위해 코드 추가 및 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~4시 사이에 일일 1회 갱신이 되므로 갱신 버튼 클릭은 하루에 한번만 하면됩니다. 이 작업을 자동화 하기 위해 crontab을 이용하여 매일 오전 10시 30분 경(통상 패치 시간(오전 10시) 고려)에 자동 실행 되도록 해보았습니다.
crontab으로 실행할 셸 스크립트를 만들어 셸 스크립트를 통해 작성했던 python를 실행할 수 있도록 했습니다.
먼저 ~/maple 경로로 이동했습니다.
$cd ~/maple
셸 파일을 작성했습니다.
vim maple_shell.sh
#!/bin/bash
cd $(dirname $0)
. maple_venv/bin/activate
python refresh_character.py
다음 명령어를 입력해 crontab을 에디터로 열었습니다.
$sudo vim /etc/crontab
그리고 작업을 추가했습니다.
...
#매일 오전 10시 30분에 ubuntu 계정으로 갱신 스크립트 실행
30 10 * * * ubuntu /home/ubuntu/maple/maple_shell.sh`
...
이제 매일 오전 10시 30분에 crontab으로 maple.gg 데이터를 자동으로 갱신하고 갱신된 정보를 스프레드 시트로 자동으로 가져올 수 있게 되었습니다.
매일 실행결과를 쉽게 확인하고 처리할 방법이 없을까?🤔